47
– Open4education Trilha – JAVA Tirando o máximo da Metaprogramação com a API Reflection Cristiano Agosti Java Developer

Apresentação Tdc2015 - Trilha Java

Embed Size (px)

Citation preview

– Open4education

Trilha – JAVATirando o máximo da Metaprogramação com a API Reflection

Cristiano AgostiJava Developer

– Open4education

Apresentação

• Mestre em Ciência da Computação • Sócio proprietário da Camtwo Sistemas

(camtwo.com.br)• Professor na Universidade do Oeste de Santa

Catarina - Unoesc (unoesc.edu.br)• A mais de 10 anos trabalhando com Java e web

– Open4education

Agenda

• Metaprogramação• Reflexão, Vantagens e Desvantagens• API Reflection• Exemplos• Conclusões

– Open4education

Metaprogramação

• Consiste na criação de programação com acapacidade de manipular a estrutura ou dados deoutros programas ou a sim mesmo

– Open4education

Algumas Perguntas

• Como invocar um método apenas usando seunome em uma String?

• Como faço para listar os atributos de uma Classedinamicamente?

• Como saber via programação quais são osConstrutores e Métodos da classe?

– Open4education

Reflexão

– Open4education

Vantagens

• Descoberta de informações de uma classe emtempo de execução

• Facilidade na manutenção• Minimização de Erros• Ganho de Produtividade• Padronização• Extensibilidade

– Open4education

Desvantagens

• Redução de desempenho se requerido com frequência

• Problemas por restrição de segurança caso executado emum ambiente com regras específicas

• Exposição de estrutura interna dos objetos

– Open4education

Quando Usar

• DSL (Linguagem de Domínio Específico)

• Compilador

• Descobrir detalhes de classes

– Open4education

– Open4education

Ponto de Partida

Class<T>

• java.lang.Class<T>• Classes definem o comportamento de objetos• Metaclasse definem o comportamento de classes

– Open4education

Classe Pessoa

– Open4education

Referência da Class

• Pela Classe– Class<?> c1 = Pessoa.classe;

• Pelo Nome da Classe– Class<?> c2 = Class.forName(“br.tdc.Pessoa”);

• Pela Instância– Pessoa p = new Pessoa();– Class c3 = p.getClass();

– Open4education

O que é metadata

• são dados sobre outros dados

• Um item de um metadado pode dizer do que setrata aquele dado

• Facilitam o entendimento dos relacionamentos e autilidade das informações dos dados

http://pt.wikipedia.org/wiki/Metadados

– Open4education

Principais Métodos

– Open4education

Principais Métodos

– Open4education

Metadata para primitivos

– Open4education

Metadata para Arrays

– Open4education

Metadata para ArraysB para byte C para char D para doubleF para floatI para intJ para longLpacote+classe para classe[]S para shortZ para boolean[ para a dimensão do array

– Open4education

Constructor

Classe responsável por recuperar as informaçõesdos Construtores da Classe

– Open4education

Constructor

– Open4education

Fields

• Representa os atributos de classe

• Através dessa classe podemos obter asinformações que queremos sobre os atributos

– Open4education

Fields

– Open4education

Exemplo para Fields

– Open4education

Method

Classe responsável pela recuperação de dadossobre métodos de uma classe

– Open4education

Invocação (invoke)

• Forma dinâmica de chamar métodos

• Método da Classe Method

Object invoke(Object obj, Object... args)

– Open4education

invoke()

• Métodos da Classe Pessoa

– Open4education

invoke()

• Métodos da Classe String

– Open4education

Anotações

• A interface AnnotatedElement oferecefuncionalidades para obtermos informações deanotações existentes em classes

• Devem ser herança de ActiveObject como Field eMethod

– Open4education

Anotações

• Devem ser herança de ActiveObject como Field eMethod

• Exemplo: criar uma anotação para Validar umatributo(field) obrigatório

– Open4education

Mãos a Obra

– Open4education

Roteiro de Exemplos

• Pessoa• Listar Construtores (construtor)• Criar instancia a partir do construtor vazio• Criar instancia a partir do construtor de atributos• Listar Atributos (fields)• Listar Métodos (method)• Invocar método mensagem• Anotações (atributo obrigatório)• Validar instancia com atributo preenchido• Validar instancia com atributo nulo

– Open4education

Exemplo Constructor

– Open4education

Exemplo Fields

– Open4education

Exemplo Method

– Open4education

Exemplo Anotações

– Open4education

Exemplo Anotações

– Open4education

Exemplo Anotações

– Open4education

Lombok

– Open4education

Proxy

• Criar implementação de Interfaces em tempo deexecução

• Forma de interceptar métodos de interfaces

– Open4education

Proxy

– Open4education

Proxy

– Open4education

Proxy

– Open4education

Conclusões

Descoberta de informações sobre classesUsar com cautelaExtensibilidadeUsado por muitos frameworksIntuitivo

– Open4education

Perguntas

– Open4education

Referências

http://wwwusers.di.uniroma1.it/~parisi/Risorse/java-reflection-explained-simply-manual-8up.pdfhttp://tutorials.jenkov.com/java-reflection/dynamic-proxies.htmlhttp://rodrigosasaki.com/https://projectlombok.org

– Open4education

Contato

• skype: cristiano.agosti• twitter: @agosti• [email protected]• facebook.com/cristiano.agosti• agosti.blog.br