SlideShare une entreprise Scribd logo
1  sur  32
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 />
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java

Contenu connexe

Tendances

Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java BasicoJoel Lobo
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)Mario Sergio
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Unidade iii aula 02 - introdução ao java
Unidade iii   aula 02 - introdução ao javaUnidade iii   aula 02 - introdução ao java
Unidade iii aula 02 - introdução ao javaNécio de Lima Veras
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova Rogério Cardoso
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)Mario Sergio
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod JavaSergio Silva
 

Tendances (20)

Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Java
JavaJava
Java
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
1707331929 ltp iv java original
1707331929 ltp iv   java original1707331929 ltp iv   java original
1707331929 ltp iv java original
 
Unidade iii aula 02 - introdução ao java
Unidade iii   aula 02 - introdução ao javaUnidade iii   aula 02 - introdução ao java
Unidade iii aula 02 - introdução ao java
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
Introdução ao Java
Introdução ao JavaIntrodução ao Java
Introdução ao Java
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod Java
 

Similaire à Java Day 2011 - Reflection: Maximizando a produtividade em Java

Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockitoRenan Uchôa
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basicoIsmael
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Giovanni Bassi
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVAWillian Magalhães
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
TDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java ProgrammerTDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java Programmertdc-globalcode
 
Capítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteCapítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteMarcio Palheta
 

Similaire à Java Day 2011 - Reflection: Maximizando a produtividade em Java (20)

Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Aula5
Aula5Aula5
Aula5
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Aula JPA
Aula JPAAula JPA
Aula JPA
 
Reflections
ReflectionsReflections
Reflections
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basico
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)
 
Java básico
Java básicoJava básico
Java básico
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Tutorial Java: Herança
Tutorial Java: HerançaTutorial Java: Herança
Tutorial Java: Herança
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVA
 
Aula4
Aula4Aula4
Aula4
 
Java7
Java7Java7
Java7
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
OOP Java
OOP JavaOOP Java
OOP Java
 
TDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java ProgrammerTDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java Programmer
 
Capítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteCapítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLite
 

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 />