publicComponentedescobreSeTemAnotacao(Class<?>classe){Componentec=classe.getAnnotation(Componente.class);System.out.println(c==null?"não tem anotação":"O valor é "+c.value());}publicOperacaodescobreSeTemAnotacaoTambem(Class<?>classe){Operacaoc=classe.getAnnotation(Operacao.class);System.out.println(c==null?"não tem anotação":"O valor é "+c.componente());}
paulog
Olá Victor,
Bem acho não expliquei exatamente o que eu buscava.
Hum… seria algo assim:
Tendo o meu classpath, como saber quais são todas as classes que implementam uma operação?
Iterando por cada classe e perguntado se ela é uma operação?
Mas, imagino eu, que exista o problema que nem todas as classes tenham sido carregada ainda. (E a demora de iterar sobre todo o classpath só da minha aplicação)
Uma outra solução seria determinar quais são os componentes e suas operações no deploy, pegando as classes compiladas e verificando se elas tem as anotações e gerando um xml “automaticamente” com esses dados…
A aplicação roda e somente precisa ler o xml para descobrir as operações de um componente.
A dificuldade, é que isso pode tornar o deploy um tanto quanto lento.
Alguma outra solução? Algo como determinar que as operações fiquem no pacote nomedocomponente.operacao?
Help?
Rafael_Nunes
Já tentou carregar essas classes por reflection para fazer essa varredura da anotação(ah não ser que essa annotation não vá pro bytecode)?
victorwss
paulog:
Olá Victor,
Bem acho não expliquei exatamente o que eu buscava.
Hum… seria algo assim:
Tendo o meu classpath, como saber quais são todas as classes que implementam uma operação?
Iterando por cada classe e perguntado se ela é uma operação?
Mas, imagino eu, que exista o problema que nem todas as classes tenham sido carregada ainda. (E a demora de iterar sobre todo o classpath só da minha aplicação)
Uma outra solução seria determinar quais são os componentes e suas operações no deploy, pegando as classes compiladas e verificando se elas tem as anotações e gerando um xml “automaticamente” com esses dados…
A aplicação roda e somente precisa ler o xml para descobrir as operações de um componente.
A dificuldade, é que isso pode tornar o deploy um tanto quanto lento.
Alguma outra solução? Algo como determinar que as operações fiquem no pacote nomedocomponente.operacao?
Help?
Cara, já fiz algo parecido uma vez. Cria um ClassLoader que abre um arquivo jar como se fosse um zip, e lá dentro identifica quais arquivos terminam com “.class”. Daí carrega cada um destes .class e então usa reflection para determinar quais classes são importantes.
paulog
Beleza.
Isso mesmo que eu queria. (Imaginava que seria algo assim).