Reflection e Annotation

12 respostas
marciobarroso

Bom-dia pessoal,

Estou trabalhando em um projeto onde precisarei efetuar através de uma task do ant, a chamada de uma classe.
Esta classe precisa através de reflection fazer um lookup no meu classpath e encontrar todas as classes anotadas com determinada anotação.

Alguém tem idéia de como fazer isso? Estou aberto a sugestões.

minha dúvida é somente qto a classe q efetuará esta tarefa.

[]'s

12 Respostas

marciobarroso

Alguém sabe se é possível encontrar todas as classes que implementam determinada interface em um classpath ?

Tipo:

public interface Bean { }

public UserBean implements Bean { }

public EmailBean implements Bean { }

Vcs sabem se eu consigo com um processo java, tendo somente a interface Bean.java, encontrar as classes q a implementam ? Tipo o que o java faz qdo chamamos um método de uma interface …

[]'s

sergiolopes

Alguns frameworks fazem isso, como o Stripes ou o VRaptor. Você pode tentar olhar o fonte deles…

Fabio_Kung

Ato de bondade! :wink:

http://vraptor2.cvs.sourceforge.net/vraptor2/vraptor2/src/main/java/org/vraptor/config/Configuration.java?view=markup

marciobarroso

Valew Fábio,

Era exatamente o que eu procurava. Cheguei até a pensar em ao invés de usar a annotation, utilizar uma interface para identificar minhas classes.

Agora consigo fazer da forma q queria, com o uso da annotation.

[]'s

mister_m

Márcio,

Para processar classes durante o build, com Java 6, use a API padrão de processamento de anotações; com Java 5, existe o apt, que faz a mesma coisa. Isso é muito mais eficiente e integrado ao processo de build, eliminando passos desnecessários e arquivos fora de sincronia.

mister_m

Fabio Kung:
Ato de bondade! :wink:

http://vraptor2.cvs.sourceforge.net/vraptor2/vraptor2/src/main/java/org/vraptor/config/Configuration.java?view=markup

Fábio, uma dica. Ao invés de fazer:

Class&lt?&gt type = Class.forName(className);

que exige obrigatoriamente a inicialização da classe e a carga de diversas classes relacionadas como conseqüência, use a forma sobrecarregada desse método com false e o contextClassLoader.

marciobarroso

mister__m:
Márcio,

Para processar classes durante o build, com Java 6, use a API padrão de processamento de anotações; com Java 5, existe o apt, que faz a mesma coisa. Isso é muito mais eficiente e integrado ao processo de build, eliminando passos desnecessários e arquivos fora de sincronia.

Mister M,

vc por acaso teria algum link para me passar a respeito desta API padrão de processamento de anotações ? Pode ser até o JavaDoc.

[]'s

mister_m

marciobarroso:

Mister M,

vc por acaso teria algum link para me passar a respeito desta API padrão de processamento de anotações ?

[list]APT (Java SE 5)[/list]
[list]Annotation Processing API (Java SE 6)[/list]

Fabio_Kung

Obrigado Michael. Foi para o jira!

Paulo_Silveira

mister__m:
Fabio Kung:
Ato de bondade! :wink:

http://vraptor2.cvs.sourceforge.net/vraptor2/vraptor2/src/main/java/org/vraptor/config/Configuration.java?view=markup

Fábio, uma dica. Ao invés de fazer:

Class&lt?&gt type = Class.forName(className);

que exige obrigatoriamente a inicialização da classe e a carga de diversas classes relacionadas como conseqüência, use a forma sobrecarregada desse método com false e o contextClassLoader.

é. vivendo e aprendendo novos metodos que ja existem a 2 anos :slight_smile:

Fabio_Kung

realmente…

mudei rapidinho e o init do mydvds (app de exemplo) já ficou 4x mais rápido!

mister_m

Pior: esse existe desde o JDK 1.2, que eu não lembro quando saiu, mas que eu já usava em 1999 :smiley:

Criado 15 de março de 2007
Ultima resposta 21 de mar. de 2007
Respostas 12
Participantes 5