Java Day 2011 - Reflection: Maximizando a produtividade em Java
1. 13087352265045Reflection: maximizando a produtividade em JavaReflection: maximizando a produtividade em Java10439408890034810701240790apresentamapresentam53536854697095por Fábio Antonellipor Fábio Antonelli571373017145<br />-764540-360566Fábio AntonelliEngenheiro de Componentes Java com Especialização lato sensu pela TNT EducacionalLíder de célula na Fábrica de Software da TNT TechnologyEspecialista em software para a área educacional tendo atuado por 5 anos como desenvolvedor do Instituto Metodista00Fábio AntonelliEngenheiro de Componentes Java com Especialização lato sensu pela TNT EducacionalLíder de célula na Fábrica de Software da TNT TechnologyEspecialista em software para a área educacional tendo atuado por 5 anos como desenvolvedor do Instituto Metodista<br />-33274068694<br />-332740243954<br />-33274054089<br />9525-337820AgendaAgenda334645234950RTTI - Runtime Type informationRTTI - Runtime Type information3346451952625Soluções que fazem uso de ReflectionSoluções que fazem uso de Reflection3346451093470Java ReflectionJava Reflection3346453670300Anotações JavaAnotações Java3346452811145Java Reflection APIJava Reflection API3346454529134Casos de UsoCasos de Uso<br />-165735-40195591440-347980RTTI – Runtime Type InformationRTTI – Runtime Type Information1264920318008046278803047450<br />5397508890Mecanismo para a obtenção de informações de objetos em tempo de execução.Mecanismo para a obtenção de informações de objetos em tempo de execução.<br />548005271780Conhecido e utilizado há, pelo menos, duas décadas0Conhecido e utilizado há, pelo menos, duas décadas<br />54800550165Algumas linguagens que fazem uso de RTTI.0Algumas linguagens que fazem uso de RTTI.<br />7829551359535BenefíciosBenefícios7829551082675RiscosRiscos782955819150O que é?O que é?257810530225Java ReflectionJava Reflection257810220980RTTI - Runtime Type informationRTTI - Runtime Type information-98435-352382AgendaAgenda<br />2552703388995A classe java.lang.Class, que representa as classes e interfaces também fornecem alguns métodos para a obtenção de informações por reflexão.0A classe java.lang.Class, que representa as classes e interfaces também fornecem alguns métodos para a obtenção de informações por reflexão.209814152764É um recurso que permite examinar objetos em tempo de execução (JVM) e agir de acordo com as informações obtidas. É possível, por exemplo, obter informaçãos sobre construtures da classe, atríbutos e seus modificadores de acesso, métodos, invocar um método dinamicamente, dentre outras.00É um recurso que permite examinar objetos em tempo de execução (JVM) e agir de acordo com as informações obtidas. É possível, por exemplo, obter informaçãos sobre construtures da classe, atríbutos e seus modificadores de acesso, métodos, invocar um método dinamicamente, dentre outras.2298702740774O pacote java.lang.reflect contém as classes básicasO pacote java.lang.reflect contém as classes básicas2098142135676Presente em java desde a versão 1.1Presente em java desde a versão 1.1-60960-500380Java Reflection – O que é?Java Reflection – O que é?-318728-554889<br />5796842228144Exposição da estrutura interna dos objetosExposição da estrutura interna dos objetos5899581324018Problemas por restrições de segurança, principalmente quando executado em um ambiente com regras específicas, como Applets (java.police)Problemas por restrições de segurança, principalmente quando executado em um ambiente com regras específicas, como Applets (java.police)610506450714Redução de desempenho, principalmente se o código a ser executado é requerido de forma constante.Redução de desempenho, principalmente se o código a ser executado é requerido de forma constante.9969571120 Não deve ser utilizada indiscriminadamente, podendo ocorrer: Não deve ser utilizada indiscriminadamente, podendo ocorrer:-68580-605155Java Reflection – RiscosJava Reflection – Riscos-326154-659565<br />5785992308860Facilita a manutençãoFacilita a manutenção5784851721371Minização de erros.0Minização de erros.5796841097986Ganho de ProdutividadeGanho de Produtividade589915531609PadronizaçãoPadronização-346710-690245-89535-636270Java Reflection – BenefíciosJava Reflection – Benefícios15113040005Se utilizada de forma criteriosa oferece:Se utilizada de forma criteriosa oferece:<br />5759451260475BenefíciosBenefícios575945983615RiscosRiscos575945720090O que é?O que é?50800431165Java ReflectionJava Reflection698501589405Soluções que fazem uso de ReflectionSoluções que fazem uso de Reflection50800121920RTTI - Runtime Type informationRTTI - Runtime Type information-305606-451442AgendaAgenda<br />-303530-534035Soluções que utilizam reflectionSoluções que utilizam reflection219710182245As grandes IDE’s de desenvolvimento java fazem uso de ReflectionAs grandes IDE’s de desenvolvimento java fazem uso de Reflection49403094424539808159588502114552496820Os frameworks de persistênciaOs frameworks de persistência494030313944040825223206707<br />838201788795Java Reflection APIJava Reflection API9105903292475Invocar um método por reflexãoInvocar um método por reflexão9074153001645Informações sobre métodosInformações sobre métodos9086852701925Informações sobre os atributos da classeInformações sobre os atributos da classe9105902433320Informações sobre os construtores da classeInformações sobre os construtores da classe6470652114550Como UsarComo Usar5759451168400BenefíciosBenefícios575945891540RiscosRiscos575945628015O que é?O que é?50800339090Java ReflectionJava Reflection698501497330Soluções que fazem uso de ReflectionSoluções que fazem uso de Reflection5080029845RTTI - Runtime Type informationRTTI - Runtime Type information-305606-543267AgendaAgenda<br />-328295-593090Java Reflection APIJava Reflection API194945228600As classes relacionadas a Reflection encontram-se no pacote java.lang.reflectAs classes relacionadas a Reflection encontram-se no pacote java.lang.reflect1949451004570Algumas ClassesAlgumas Classes5092701369060java.lang.reflect.Constructor: Fornece informações sobre os construtures da classe.java.lang.reflect.Constructor: Fornece informações sobre os construtures da classe.5041902266950java.lang.reflect.FieldPermite a obtenção de informações sobre os atributos da classe.java.lang.reflect.FieldPermite a obtenção de informações sobre os atributos da classe.5092703209290java.lang.reflect.MethodA classe Method permite que se obtenha informações sobre os métodos.java.lang.reflect.MethodA classe Method permite que se obtenha informações sobre os métodos.5097914105964java.lang.reflect.ModifierA classe java.lang.reflect.Modifier permite que se obtenha informações sobre os modificadores de acesso.java.lang.reflect.ModifierA classe java.lang.reflect.Modifier permite que se obtenha informações sobre os modificadores de acesso.<br />209814317150Obtendo informações sobre o construtor da classe.Obtendo informações sobre o construtor da classe.-317548-499881Como usarComo usar<br />209814276896//Este trecho de código exemplifica como obter informações sobre os construtores da classepublic static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.constructors.ConstructorInformation1quot;
);//Obtém os construtures declarados na Classe exibe o seu nome.//Obviamente, o nome do construtor é o mesmo nome da classefor (Constructor<?> c: c1.getDeclaredConstructors()){System.out.println(quot;
Construtores da classe: quot;
+ c.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}0//Este trecho de código exemplifica como obter informações sobre os construtores da classepublic static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.constructors.ConstructorInformation1quot;
);//Obtém os construtures declarados na Classe exibe o seu nome.//Obviamente, o nome do construtor é o mesmo nome da classefor (Constructor<?> c: c1.getDeclaredConstructors()){System.out.println(quot;
Construtores da classe: quot;
+ c.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}<br />197563-516805//Este trecho de código exemplifica como obter informações sobre os construtores da classe, bem como //o tipo de cada argumetno declarado na assinatura do método.public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.constructors.ConstructorInformation1quot;
);//Obtém os construtures declarados na Classe exibe o seu nome.//Obviamente, o nome do construtor é o mesmo nome da classefor (Constructor<?> c: c1.getDeclaredConstructors()){System.out.println(quot;
Construtor da Classe: quot;
+ c.getName());//Obtém informações sobre os tipos declarados na assinatura do construtorfor (Class<?> attType: c.getParameterTypes()){System.out.println(quot;
+---Tipos de Argumentos do Construtor: quot;
+ attType.getSimpleName());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}0//Este trecho de código exemplifica como obter informações sobre os construtores da classe, bem como //o tipo de cada argumetno declarado na assinatura do método.public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.constructors.ConstructorInformation1quot;
);//Obtém os construtures declarados na Classe exibe o seu nome.//Obviamente, o nome do construtor é o mesmo nome da classefor (Constructor<?> c: c1.getDeclaredConstructors()){System.out.println(quot;
Construtor da Classe: quot;
+ c.getName());//Obtém informações sobre os tipos declarados na assinatura do construtorfor (Class<?> attType: c.getParameterTypes()){System.out.println(quot;
+---Tipos de Argumentos do Construtor: quot;
+ attType.getSimpleName());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}<br />349885-363855//Este trecho de código exemplifica como obter informações sobre os construtores da classe, bem como //da anotação feita no método construtor da classe.@ConstructorProperties(value={})public ConstructorInformation3(int id, String name) {}public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.constructors.ConstructorInformation1quot;
);//Obtém os construtures declarados na Classe exibe o seu nome.//Obviamente, o nome do construtor é o mesmo nome da classefor (Constructor<?> c: c1.getDeclaredConstructors()){System.out.println(quot;
Construtor da Classe: quot;
+ c.getName());//Obtém informações sobre anotações do contrutorfor (Annotation anot: c.getDeclaredAnnotations()){System.out.println(quot;
+---Anotação Java: quot;
+ anot.toString());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}0//Este trecho de código exemplifica como obter informações sobre os construtores da classe, bem como //da anotação feita no método construtor da classe.@ConstructorProperties(value={})public ConstructorInformation3(int id, String name) {}public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.constructors.ConstructorInformation1quot;
);//Obtém os construtures declarados na Classe exibe o seu nome.//Obviamente, o nome do construtor é o mesmo nome da classefor (Constructor<?> c: c1.getDeclaredConstructors()){System.out.println(quot;
Construtor da Classe: quot;
+ c.getName());//Obtém informações sobre anotações do contrutorfor (Annotation anot: c.getDeclaredAnnotations()){System.out.println(quot;
+---Anotação Java: quot;
+ anot.toString());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}<br />368300158115//Este trecho de código exemplifica como obter informações sobre os atributos declarados na classe.Declarados os atributos:private int id;private String name;public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.fields.FieldInformation1quot;
);//Obtém os atributos declarados na Classe e exibe o seu nome.for (Field c: c1.getDeclaredFields()){System.out.println(quot;
Nome do Atributo: quot;
+ c.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}0//Este trecho de código exemplifica como obter informações sobre os atributos declarados na classe.Declarados os atributos:private int id;private String name;public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.fields.FieldInformation1quot;
);//Obtém os atributos declarados na Classe e exibe o seu nome.for (Field c: c1.getDeclaredFields()){System.out.println(quot;
Nome do Atributo: quot;
+ c.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}361950-414313Obtendo informações relacionadas aos atributos da classeObtendo informações relacionadas aos atributos da classe<br />356313-347031//Este trecho de código exemplifica como obter informações sobre os atributos declarados na classe,//bem como sobre os seus modificadores de acesso.Declarados os atributospublic int id;private Stringname;final Stringempresa = quot;
TNT Tecnhologyquot;
;public static void main(String[] args){ Class<?> c1 = null; try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.fields.FieldInformation2quot;
);//Obtém os atributos declarados na Classe e exibe o seu nome e tipo.for (Field c: c1.getDeclaredFields()){ switch (c.getModifiers()) {case Modifier.PUBLIC:System.out.println(Modifier.toString(Modifier.PUBLIC) + quot;
quot;
+ c.getType().getSimpleName() + quot;
quot;
+ c.getName()+quot;
;quot;
);break;case Modifier.PRIVATE:System.out.println(Modifier.toString(Modifier.PRIVATE) + quot;
quot;
+ c.getType().getSimpleName() + quot;
quot;
+ c.getName()+quot;
;quot;
);break;case Modifier.FINAL:System.out.println(Modifier.toString(Modifier.FINAL) + quot;
quot;
+ c.getType().getSimpleName() + quot;
quot;
+ c.getName()+quot;
;quot;
);break;default:break; }} …0//Este trecho de código exemplifica como obter informações sobre os atributos declarados na classe,//bem como sobre os seus modificadores de acesso.Declarados os atributospublic int id;private Stringname;final Stringempresa = quot;
TNT Tecnhologyquot;
;public static void main(String[] args){ Class<?> c1 = null; try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.fields.FieldInformation2quot;
);//Obtém os atributos declarados na Classe e exibe o seu nome e tipo.for (Field c: c1.getDeclaredFields()){ switch (c.getModifiers()) {case Modifier.PUBLIC:System.out.println(Modifier.toString(Modifier.PUBLIC) + quot;
quot;
+ c.getType().getSimpleName() + quot;
quot;
+ c.getName()+quot;
;quot;
);break;case Modifier.PRIVATE:System.out.println(Modifier.toString(Modifier.PRIVATE) + quot;
quot;
+ c.getType().getSimpleName() + quot;
quot;
+ c.getName()+quot;
;quot;
);break;case Modifier.FINAL:System.out.println(Modifier.toString(Modifier.FINAL) + quot;
quot;
+ c.getType().getSimpleName() + quot;
quot;
+ c.getName()+quot;
;quot;
);break;default:break; }} …<br />508635405879//Este trecho de código exemplifica como obter informações sobre os métodos da classepublic static void main(String[] args){Class c1<?> = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.methods.MethodInformation1quot;
);//Obtém os métodos declarados na Classe e exibe o seu nome.for (Method c: c1.getDeclaredMethods()){System.out.println(quot;
Nome do Método: quot;
+ c.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}0//Este trecho de código exemplifica como obter informações sobre os métodos da classepublic static void main(String[] args){Class c1<?> = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.methods.MethodInformation1quot;
);//Obtém os métodos declarados na Classe e exibe o seu nome.for (Method c: c1.getDeclaredMethods()){System.out.println(quot;
Nome do Método: quot;
+ c.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}514350-261620Obtendo informações sobre os métodos da classeObtendo informações sobre os métodos da classe<br />383555-366395//Este trecho de código exemplifica como obter informações sobre os métodos da classe, bem como//sobre a anotação feita ao métodoDado o método:@ValorPadrao(strValue=quot;
fabio.antonelliquot;
)public void setName(String name) {this.name = name;}public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.methods.MethodInformation2quot;
);//Obtém os métodos declarados na Classe e exibe o seu nome.for (Method mt: c1.getDeclaredMethods()){System.out.println(quot;
Nome do Método: quot;
+ mt.getName());//se houver alguma anotação para o método, exibe o seu nomefor (Annotation annotation: mt.getDeclaredAnnotations()){System.out.println(quot;
+--Anotação do Método: quot;
+ annotation.toString());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}0//Este trecho de código exemplifica como obter informações sobre os métodos da classe, bem como//sobre a anotação feita ao métodoDado o método:@ValorPadrao(strValue=quot;
fabio.antonelliquot;
)public void setName(String name) {this.name = name;}public static void main(String[] args){Class<?> c1 = null;try {//Obtém uma nova instância da classe.c1 = Class.forName(quot;
br.com.javaday.reflection.methods.MethodInformation2quot;
);//Obtém os métodos declarados na Classe e exibe o seu nome.for (Method mt: c1.getDeclaredMethods()){System.out.println(quot;
Nome do Método: quot;
+ mt.getName());//se houver alguma anotação para o método, exibe o seu nomefor (Annotation annotation: mt.getDeclaredAnnotations()){System.out.println(quot;
+--Anotação do Método: quot;
+ annotation.toString());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}<br />440719-619125Invocando um método por reflexãoInvocando um método por reflexão443230-7906//Este trecho de código exemplifica como invocar um métodoDado o método:public void setName(String name) {this.name = name;System.out.println(quot;
Value: quot;
+ this.name);}public static void main(String[] args){Class<?> c1 = null;Method method = null;Class[] paramTypes = new Class[]{String.class};Object[]attValue= new Object[]{quot;
Invoke method by reflectionquot;
};try {//Retorna o objeto da classe, com base no nome da classec1 = Class.forName(quot;
br.com.javaday.reflection.methods.MethodInformation3quot;
);//Através de c1.getMethod, obtenho o método a ser invocado, passando o nome do método, e os tipos de //parâmetros declarados na method = c1.getMethod(quot;
setNamequot;
, paramTypes);//Invoca o método. Como parâmetros, são passados uma nova instância da classe que contém o método, e um Vetor com os valoresmethod.invoke(c1.newInstance(), attValue);} catch (ClassNotFoundException e) {e.printStackTrace();} . . .0//Este trecho de código exemplifica como invocar um métodoDado o método:public void setName(String name) {this.name = name;System.out.println(quot;
Value: quot;
+ this.name);}public static void main(String[] args){Class<?> c1 = null;Method method = null;Class[] paramTypes = new Class[]{String.class};Object[]attValue= new Object[]{quot;
Invoke method by reflectionquot;
};try {//Retorna o objeto da classe, com base no nome da classec1 = Class.forName(quot;
br.com.javaday.reflection.methods.MethodInformation3quot;
);//Através de c1.getMethod, obtenho o método a ser invocado, passando o nome do método, e os tipos de //parâmetros declarados na method = c1.getMethod(quot;
setNamequot;
, paramTypes);//Invoca o método. Como parâmetros, são passados uma nova instância da classe que contém o método, e um Vetor com os valoresmethod.invoke(c1.newInstance(), attValue);} catch (ClassNotFoundException e) {e.printStackTrace();} . . .<br />2876551979930Java Reflection APIJava Reflection API8350254797425Obter informações da Anotação com ReflectionObter informações da Anotação com Reflection8350254506595Como utilizar uma anotação criadaComo utilizar uma anotação criada8350254201795Criar sua própria anotaçãoCriar sua própria anotação2546353797935Anotações JavaAnotações Java11144253483610Invocar um método por reflexãoInvocar um método por reflexão11112503192780Informações sobre métodosInformações sobre métodos11125202893060Informações sobre os atributos da classeInformações sobre os atributos da classe11144252624455Informações sobre os construtores da classeInformações sobre os construtores da classe8509002305685Como UsarComo Usar7797801359535BenefíciosBenefícios7797801082675RiscosRiscos779780819150O que é?O que é?254635530225Java ReflectionJava Reflection2736851688465Soluções que fazem uso de ReflectionSoluções que fazem uso de Reflection254635220980RTTI - Runtime Type informationRTTI - Runtime Type information-102067-352382AgendaAgenda<br />219710429895Definição: Fragmentos de código que podem ser utilizados junto a classe, objetos da classe e métodos da classe. Podem ser simples marcadores, ou possuir elementos que terão valores informados.Podem por exemplo, ser utilizadas com a finalidade de eliminar arquivos de configurações, relacionar atributos com campos de banco de dados, etc.0Definição: Fragmentos de código que podem ser utilizados junto a classe, objetos da classe e métodos da classe. Podem ser simples marcadores, ou possuir elementos que terão valores informados.Podem por exemplo, ser utilizadas com a finalidade de eliminar arquivos de configurações, relacionar atributos com campos de banco de dados, etc.2200883964476As classes de anotações podem ser empacotadas, distribuidas e importadas por qualquer outra classe java.As classes de anotações podem ser empacotadas, distribuidas e importadas por qualquer outra classe java.2200882772674Implementados através de interfaces, sendo que a interface possui algumas características diferenciadas.Implementados através de interfaces, sendo que a interface possui algumas características diferenciadas.-317548-392189Anotações JavaAnotações Java<br />5683254761979@Target, que indica aonde a anotação poderá ser utilizada.@Target, que indica aonde a anotação poderá ser utilizada.3117855149411Algumas anotaçõesAlgumas anotações6813555483339@override, @Entity, @Statless, @id, @column, dentre outras muitas.@override, @Entity, @Statless, @id, @column, dentre outras muitas.5899581868548@Retention, que indica como as anotações serão vistas.Ex: RetentionPolicy.Source, indica que será ignorada pelo compilador em tempo de execução (@SuppressWarnings) RetentionPolicy.Class, indica que será compilada e gravada junto ao arquivo, mas que será ignorada em tempo de execução. RetentionPolicy.Runtime, indica que será compilada e gravada junto ao arquivo, e estará disponível para ser utilizada em tempo de execução.@Retention, que indica como as anotações serão vistas.Ex: RetentionPolicy.Source, indica que será ignorada pelo compilador em tempo de execução (@SuppressWarnings) RetentionPolicy.Class, indica que será compilada e gravada junto ao arquivo, mas que será ignorada em tempo de execução. RetentionPolicy.Runtime, indica que será compilada e gravada junto ao arquivo, e estará disponível para ser utilizada em tempo de execução.3125561447308A anotação a ser criada faz uso de outras anotações, como:A anotação a ser criada faz uso de outras anotações, como:312556902777A palava reservada interface deve ser precedida do caracter @A palava reservada interface deve ser precedida do caracter @312556409618Primeiramente criar uma interface.Primeiramente criar uma interface.-213138-392515Como criar suas próprias anotaçõesComo criar suas próprias anotações<br />2976791110551//Interface que irá atuar como a anotação da classepackage br.com.javaday.reflection.annotations;import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface IdentificadorDeClasse {StringnomeDaClasse();String modulo();}package br.com.javaday.reflection.annotations;import java.io.Serializable;@IdentificadorDeClasse(nomeDaClasse=quot;
ClasseAnotada quot;
, modulo=quot;
Acadêmicoquot;
)public class ClasseAnotada implements Serializable {private static final long serialVersionUID = 8736239142167231264L;public ClasseAnotada(){}}0//Interface que irá atuar como a anotação da classepackage br.com.javaday.reflection.annotations;import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface IdentificadorDeClasse {StringnomeDaClasse();String modulo();}package br.com.javaday.reflection.annotations;import java.io.Serializable;@IdentificadorDeClasse(nomeDaClasse=quot;
ClasseAnotada quot;
, modulo=quot;
Acadêmicoquot;
)public class ClasseAnotada implements Serializable {private static final long serialVersionUID = 8736239142167231264L;public ClasseAnotada(){}}302281532908Anotando uma classeAnotando uma classe-223413-286385Como utilizar uma anotação criadaComo utilizar uma anotação criada<br />199540-237654//Interface que irá atuar como a anotação para atributos da classepackage br.com.javaday.reflection.annotations;import java.lang.annotation.*;/** * @author fabio.antonelli * */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface IdentificadorDeAtributo {StringfieldName();intfieldType();}00//Interface que irá atuar como a anotação para atributos da classepackage br.com.javaday.reflection.annotations;import java.lang.annotation.*;/** * @author fabio.antonelli * */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface IdentificadorDeAtributo {StringfieldName();intfieldType();}<br />353652-83542//Classe com os atributos anotados.package br.com.javaday.reflection.annotations;import java.io.Serializable;import java.sql.Types;/** * @author fabio.antonelli * */@IdentificadorDeClasse(nomeDaClasse=quot;
AtributoAnotadoquot;
, modulo=quot;
JavaDay2011quot;
)public class AtributoAnotado implements Serializable {private static final long serialVersionUID = 8736239142167231264L;@IdentificadorDeAtributo(fieldName=quot;
id_alunoquot;
, fieldType=Types.INTEGER)private intid; @IdentificadorDeAtributo(fieldName=quot;
nome_alunoquot;
, fieldType=Types.VARCHAR)private String nomeAluno;public AtributoAnotado(){}}00//Classe com os atributos anotados.package br.com.javaday.reflection.annotations;import java.io.Serializable;import java.sql.Types;/** * @author fabio.antonelli * */@IdentificadorDeClasse(nomeDaClasse=quot;
AtributoAnotadoquot;
, modulo=quot;
JavaDay2011quot;
)public class AtributoAnotado implements Serializable {private static final long serialVersionUID = 8736239142167231264L;@IdentificadorDeAtributo(fieldName=quot;
id_alunoquot;
, fieldType=Types.INTEGER)private intid; @IdentificadorDeAtributo(fieldName=quot;
nome_alunoquot;
, fieldType=Types.VARCHAR)private String nomeAluno;public AtributoAnotado(){}}<br />-182880933450for (Annotation anotacao : this.getClass().getDeclaredAnnotations()) {if (anotacao instanceof IdentificadorDeClasse){. . .} else if (anotacao instanceof IdentificadorDeAtributo){. . .}}for (Annotation anotacao : this.getClass().getDeclaredAnnotations()) {if (anotacao instanceof IdentificadorDeClasse){. . .} else if (anotacao instanceof IdentificadorDeAtributo){. . .}}-182317-499881Obter informações da anotação com ReflectionObter informações da anotação com Reflection<br />8223255422151Projeto MosaicoProjeto Mosaico2514604920615Casos de UsoCasos de Uso2876551788795Java Reflection APIJava Reflection API8350254606290Obter informações via Reflection da anotaçãoObter informações via Reflection da anotação8350254315460Utilizar a anotação criadaUtilizar a anotação criada8350254010660Criar sua própria anotaçãoCriar sua própria anotação2546353606800Anotações JavaAnotações Java11144253292475Invocar um método por reflexãoInvocar um método por reflexão11112503001645Informações sobre métodosInformações sobre métodos11125202701925Informações sobre os atributos da classeInformações sobre os atributos da classe11144252433320Informações sobre os construtores da classeInformações sobre os construtores da classe8509002114550Como UsarComo Usar7797801168400BenefíciosBenefícios779780891540RiscosRiscos779780628015O que é?O que é?254635339090Java ReflectionJava Reflection2736851497330Soluções que fazem uso de ReflectionSoluções que fazem uso de Reflection25463529845RTTI - Runtime Type informationRTTI - Runtime Type information-102067-543267AgendaAgenda<br />-269240-927735Projeto MosaicoProjeto Mosaico-242570-264160Criando um menuCriando um menu<br />-11895987751300-1189598640300<br />-4826011239500-50165-544830Chamar uma classe com reflectionChamar uma classe com reflection<br />-3655392144090078929-720539Criando um JTabbedPane com ReflectionCriando um JTabbedPane com Reflection883254-442945510701476258<br />-317548-286385ConclusõesConclusões<br />