| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2008 17:13:09
|
jopss
Java Ninja
![[Avatar]](/images/avatar/0d2f28fbfb3c845930a1cba0672950b1.jpg)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2008 17:16:15
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2008 08:58:11
|
jopss
Java Ninja
![[Avatar]](/images/avatar/0d2f28fbfb3c845930a1cba0672950b1.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2008 09:16:19
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2008 09:48:27
|
renatocustodio
JavaGuru
![[Avatar]](/images/avatar/7e3da1dca2700e3225382921dd70b8c7.jpg)
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?
|
|
|
 |
|
|
|
|