Verificando annotacoes de uma classe....  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
jopss
Java Ninja
[Avatar]

Membro desde: 13/07/2006 18:32:16
Mensagens: 281
Localização: Campo Grande/MS
Offline

Olá...

Estou brincando com Annotations e classes, e agora estou travado no seguinte caso:
Tenho uma anotação em uma classe, que indica uma outra classe (para ações).....
Agora, como eu faço o "ligamento" entre elas, tipo, como eu posso fazer para acessar dados/métodos da outra?

Tenho esta classe anotada:


E esta outra "normal":


Agora eu queria que quando carregado a classe TestAnnotation, automaticamente acesse o método "ola" de TestAction.
Mas como fazer para saber as classes em execução, saber se ela implementa a anotacao, pegar a classe referenciada na anotação e fazer o acesso.
Tenho uma boa experiencia com Refletion.. acessar methods, fields, etc eu faço de boa. Mas nao estou conseguindo fazer isto.

A ideia seria criar uma classe que pegasse o path de onde está os ".class", verificar se implementa a anotacao, pegar a classe referenciada e acessar o método "ola".... mas, dessa forma, como eu faria para fazer tal verificação a toda carga da classe TestAnnotation ?? Ou melhor, como fazer pra acessar somente esta classe carregada "agora" e verificar a anotação?? Aspectos seria o ideal ??

Estou meio perdido... alguem tem ideia?

jopss

jopss
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Para você obter tal tipo de comportamento, você precisa carregar sua aplicação com um ClassLoader customizado que fizesse exatamente isso - e é por isso que não é tão fácil usar Annotations quanto parece.
[WWW]
jopss
Java Ninja
[Avatar]

Membro desde: 13/07/2006 18:32:16
Mensagens: 281
Localização: Campo Grande/MS
Offline

Olá thingol. vlw pela dica..

Eu até consigo criar um ClassLoader customizado meu para fazer oq eu quero, mas, agora surgiu uma dúvida: o uso pelo cliente. Ou seja, quando uma classe tiver que ser carregada por este ClassLoader criado.

Eu faço assim, e funciona:


Isso abre a tela e, com o loader, verifica se existe uma anotação específica, fazendo algo entao....
O problema é que não se sabe qual classe irá implementar a annotacao, entao, todas as classes que eu quiser ser "pesquisada", terei que fazer o loader na mão ?? Eu queria fazer somente isso e funcionasse:



Tipo, de alguma forma, indicar ao java a minha loader e deixar ele se virar com o resto...
Creio que seja possível, pois usamos diariamente diversos frameworks e suas anotacoes, e nao precisamos mexer com ClassLoader deles.... usamos as classes normalmente....

Esta é a caracteristica que preciso, como faria ?? Pelo que pesquisei até agora, não ví como. Na documentação diz para fazer como da primeira forma.... mas então como os frameworks funfam ??

jopss

This message was edited 2 times. Last update was at 27/05/2008 09:02:38

sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

jopss wrote:
Agora eu queria que quando carregado a classe TestAnnotation, automaticamente acesse o método "ola" de TestAction.
Mas como fazer para saber as classes em execução, saber se ela implementa a anotacao, pegar a classe referenciada na anotação e fazer o acesso.
Tenho uma boa experiencia com Refletion.. acessar methods, fields, etc eu faço de boa. Mas nao estou conseguindo fazer isto.

A ideia seria criar uma classe que pegasse o path de onde está os ".class", verificar se implementa a anotacao, pegar a classe referenciada e acessar o método "ola".... mas, dessa forma, como eu faria para fazer tal verificação a toda carga da classe TestAnnotation ?? Ou melhor, como fazer pra acessar somente esta classe carregada "agora" e verificar a anotação?? Aspectos seria o ideal ??



Faltam peças neste seu puzzle. Reflection serve para ler as anotações tb ( getAnnotations()).
Não precisa mexer com arquivos. (pelo menos não vejo vantagem)
Mas as anotações estão em uma terceira classe. É essa classe que tem que ser investigada.
Vc não precisa investigar a classe no classe loader se usar um façade ou lazy loading.
Ou seja, o seu framework executa a terceira classe , durante a execução ele investiga a classe , memoria isso e executa
da proxima vez ele já tem o modelo e apenas executa.

Com esse Testblablabl é meio complica entender o que está tentando fazer...



Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
renatocustodio
JavaGuru
[Avatar]

Membro desde: 04/03/2008 07:21:24
Mensagens: 249
Offline

Talvez o que ele está querendo fazer seja mais fácil com AOP, não?
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team