Conversando com uns amigos da pos-graduacao, surgiu a pergunta: O que e reflection? Sabiamos a resposta, mas sabe quando voce fica olhando um para cara do outro e acaba falando: ah e dificil de explicar. Entao essa foi a motivacao para esse post. O que e reflection? reflection e considerado lento? vou quebrar o encapsulamento? Reflection e geralmente utilizando para oferecer a opcao da aplicacao instanciar classes, invocar metodos e acessar atributos a partir de strings, como o nome do metodo que se quer invocar, passadas como parametros, fazendo com que a aplicacao execute fluxos de controle mais dinamicos e em tempo de execucao. Frameworks como o JSF e o Struts utilizam reflection para atribuir valores do request dentro das propriedades de um java bean. Na verdade reflection e bem mais simples do que se imagina, ja que ele trabalha na execucao dinamica de coisas triviais para os desenvolvedores: classes, metodos, atributos e etc. Basicamente o codigo consiste em fazer um cast de uma chamada Class.newInstance usado para criar novos objetos para a classe/interface que se deseja utilizar. A API de Criacao de Objetos disponibiliza um metodo static para programaticamente instanciar classes em tempo de execucao fornecendo apenas o nome da classe. Basicamente utilizando Class.forName(net.valdemarjr.blog.Classe). Esse metodo e o mais comum para recuperar a instancia, mas nao e o unico metodo, possuindo tambem Class.forName(String name, boolean initialize, ClassLoader loader). Class reflection = Class.forName("net.valdemarjr.blog.Classe"); IFClasse classe = (IFClasse) reflection.newInstance(); System.out.println(classe.metodo()); Para Invocar metodos e obter o Class e dele voce pode iterar entre o array de metodos da classe ou atraves da assinatura do metodo. E a invocacao do metodo e atraves de Method.invoke(); Method[] methods = classe.getMethods(); for (Method m: methods) { if (m.getName().equals(metodo)) { return m.invoke(classe.newInstance()); } } Assim como classes e metodos podem ser acessados em tempo de execucao acessar atributos nao poderia ficar de fora. Atributos podem ser lidos e escritos em tempo de execucao chamando os metodos Field.get e Field.set, classe que e recuperada apartir da instancia criada Class.newInstance(). Field field = classe.getField("atributo"); System.out.println("Valor Atributo: " + field.toString()); Object instance = classe.newInstance(); field.set(instance, novoValor); Um detalhe importante e que todas a regras de visibilidade(protected, default, private e etc) ainda sao validas, entao nao adianta tentar acessar um atributo private de uma outra classe, por exemplo, voce recebera um java.lang.NoSuchFieldException. Logico que reflection nao e apenas isso, tanto que tem um livro falando so sobre reflection. Bom fica a dica ai. Acontecera em Sao Paulo o Seminario Nacional de SOA, a segunda edicao do evento, que tambem sera realizado no Rio de Janeiro. Serao discutidos aspectos conceituais de SOA, tendencias de mercado, mitos e armadilhas, governanca SOA e etc.O seminario terao como instrutores Francisco Calmon, Ricardo de Castro Barbosa(PMP) e Redson Souza da Silva(PMP). O publico alvo para esse seminario sao Gerentes de TI, Analistas de negocio, arquitetos de sistemas, desenvolvedores(eu) e demais profissionais envolvidos em arquitetura de sistemas, modelagem e design de servicos.A empresa SOA Savoir Faire esta a frente desse evento. O livro do professor Thomas Erl lancado no Brasil, foi revisado por eles. Isso mostra a