Upload
cristiano-agosti
View
69
Download
6
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
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
Ponto de Partida
Class<T>
• java.lang.Class<T>• Classes definem o comportamento de objetos• Metaclasse definem o comportamento de classes
– 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
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
Fields
• Representa os atributos de classe
• Através dessa classe podemos obter asinformações que queremos sobre os atributos
– Open4education
Invocação (invoke)
• Forma dinâmica de chamar métodos
• Método da Classe Method
Object invoke(Object obj, Object... args)
– 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
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
Proxy
• Criar implementação de Interfaces em tempo deexecução
• Forma de interceptar métodos de interfaces
– Open4education
Conclusões
Descoberta de informações sobre classesUsar com cautelaExtensibilidadeUsado por muitos frameworksIntuitivo
– 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