AspectJ :: Interceptar somente métodos "anotados"  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
marciobarroso
Virtual Machine Man
[Avatar]

Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline

Pessoal,

Criei um aspecto:



Isso significa que todos os métodos executados dentro do diretório cc.marcio.cache.service.* serão interceptados.

Gostaria de melhorar este aspect usando annotation, onde ao invés de executar a cada método do pacote, só executaria no método que fosse anotado.

Alguém sabe se isso é possivel ou poderia me dar uma idéia de como fazer isso?

De qualquer forma, estou pesquisando, e caso encontre a solução, eu posto aqui.

[]'s

[Email] [WWW] [MSN]
marciobarroso
Virtual Machine Man
[Avatar]

Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline

Resolvi o problema fazendo o seguinte:

Criei a anotação:



Meu aspecto ficou da seguinte forma:



Sendo assim, para que um método seja interceptado pelo Aspecto, basta anotá-lo conforme abaixo:



Se por acaso alguém tiver alguma sugestão de como melhorar esta implementação, por favor comentar.

[]'s
[Email] [WWW] [MSN]
thingol
Moderador

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



Não seria um pouquinho mais rápido:

:?:

(Não testei portanto não sei se funciona. Obviamente usar "getAnnotation" em vez de "getDeclaredAnnotations" tem uma semântica um pouco diferente, já que "getAnnotation" pega anotações herdadas, e "getDeclaredAnnotations" só pega as diretamente anotadas na classe.)

This message was edited 1 time. Last update was at 03/03/2009 12:04:39

[WWW]
marciobarroso
Virtual Machine Man
[Avatar]

Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline

O incrivel thingol foi que eu executei o processo pegando os milisegundos para ver qto estava demorando, e praticamente não tem diferença. E como vc mesmo disse, o interessante é que eu considere somente as anotações declaradas diretamente no método.

Mas algo que esta me deixando com a pulga atrás da orelha é que eu encontrei uma implementação onde eu declaro a annotation no meu aspecto, mas não estou conseguindo entender como fazer o aspecto considerar somente os métodos anotados.

O processo que eu fiz irá considerar todos os métodos publicos dentro do projeto, e eu irei filtrar somente pelo if ... esta tentando fazer um filtro mais inteligente.

Eu encontrei este link mas não consegui entender mto bem como fazer meu pointcut entender que eu irei considerar somente os métodos anotados.

[Email] [WWW] [MSN]
marciobarroso
Virtual Machine Man
[Avatar]

Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline

Resolvi o problema com a seguinte solução:



Desta forma, os únicos métodos da aplicação que serão interceptados são os que forem anotados com @AutoCache.

[]'s
[Email] [WWW] [MSN]
marciobarroso
Virtual Machine Man
[Avatar]

Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline

Pessoal,

Mais um problema no mesmo escopo.

Eu tenho na minha aplicação o spring fazendo a injeção de dependências dos objetos.

No spring, eu associo uma interface a um bean, e o mesmo via polimorfismo, instancia a implementação e injeta onde é necessário.

No meu aspecto, quando eu tento fazer o seguinte ...



... esta printando o seguinte :



O problema é que desta forma não estou conseguindo acessar a implementação do método, pois preciso recuperar algumas anotações que estão na implementação e a própria execução do método.

Alguém sabe como resolver isso?!?

Obrigado,
[Email] [WWW] [MSN]
marciobarroso
Virtual Machine Man
[Avatar]

Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline

Ninguém tem idéia??!?! Desculpe o desespero
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team