BT

Ramnivas Laddad tomando decisões AOP com AspectJ e Spring AOP

por Srini Penchikala , traduzido por Douglas Masson em 07 Jan 2009 |

A combinação Spring AOP/AspectJ oferece muitas escolhas, sejam elas relacionadas ao sistema AOP (bytecode-based ou AOP proxy-based), relacionadas à sintaxe (AspectJ tradicional, @AspectJ ou sintaxe XML) ou opções de weaving (build time ou load-time weaver) e um entendimento claro de todas estas escolhas é muito importante para aplicá-las de forma prática quando se utiliza Aspectos em aplicações corporativas.

Ramnivas Laddad disse apenas que um tipo de AOP não se adaptará a todas aplicações e escolher a combinação certa ajudará desenvolvedores a serem bem sucedidos com a AOP. Ele fez uma apresentação na recente confêrencia SpringOne Americas sobre os vários designs AOP, escolhas de implementação do Spring AOP framework e as melhores práticas de utilização em suas aplicações web.

Ramnivas discutiu as vantagens e as limitações do weaving no AspectJ e da abordagem proxy-based do Spring AOP. Escolher entre Spring AOP e AspectJ depende de alguns designs e fatores ambientais. Utilize o Spring AOP nos seguintes cenários:

  • a interceptação somente a nível de método é suficiente.
  • a potência total do AOP é demais.
  • Não quer usar um compilador especial como o compilador do AspectJ (AJC).
  • Cross-cutting de domains objects não é necessário.
  • Aspectos pré-escritos satisfazem suas necessidades.

Utilize AspectJ AOP em todos os outros cenários. Ele listou alguns exemplos de aplicações de AspectJ (tracing detalhado e monitoramento, domain objects, segurança) e AOP proxy (gerenciamento de transação, monitoramento JXM, trabalho remoto e segurança). Na apresentação, Ramnivas mostrou as diferenças entre o AspectJ tradicional e as opções de sintaxe @AspectJ com exemplos de código.

Weaving no ApectJ inclui as opções: compile-time ou load-time weaving (LTW). Quando utilizar a opção LTW, você pode usar o Spring-driven LTW que permite interlaçar aspectos sem que o container inicie modificações de script (sem -javaagent) ou por meio do agente JPA do Spring usando a opção de configuração . A comparação entre estas duas opções de weaving é a seguinte:

Build-time (compile/binary):

  • Custo do Weaving no build time, mas toda velocidade no load-time.
  • Construir sistema de modificações são necessárias.
  • Não são necessárias mudanças no deploy.
  • Melhor suporte de IDE com Eclipse AspectJ Development Tools (AJDT).

Load-time:

  • Velocidade do Load-time e footprint de memória afetada.
  • Constrói sistema inalterado, mas mudanças de implementação são necessárias para interlaçar os aspectos.
  • Não suporta ferramenta IDE.

Design AOP escolhe incluir a implementação do pointcut usando assinaturas join point e usando wildcards para escolher uma variedade de join points. Metadata (Anotações) podem também ser usados para capturar os join points que oferece as seguintes vantagens e desvantagens:

  • Vantagens:
    Anotations é uma maneira fácil de capturar certas preocupações nas aplicações. Elas ajudam a limitar a colaboração entre aspecto e as classes para apenas anotações.
  • Desvantagens:
    A colaboração a partir das classes é necessária. Além disso, os excessos de anotações podem encobrir as propriedades esquecidas da AOP.

Algumas das melhores práticas na utilização de metadata para implementação da AOP são:

  • Anotações são melhores para expressar as características intrínsecas de um programa de elemento.
  • Eles deveriam descrever o que é verdade no join point - o que não precisaria acontecer nesses points.
  • Evite implementação especifica de anotações
  • Anotações deveriam descrever o que é verdade no elemento anotado. Por exemplo, para capturar um cenário do tipo somente leitura, utilize @ReadOnly no nome da anotação e não @TakeReadLock. E para marcar um método que precisa ser transacional utilize @Transactional e não @JTATransactional.
  • Não utilize anotações para criar macros.
  • Utilize anotações que já existem como JPA (@Entity, @Table), JAX-WS (@WebService, @WebMethod), Spring (@Component, @Service, @Autowired, @ManagedResource).

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.