BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Ramnivas Laddad tomando decisões AOP com AspectJ e Spring AOP

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

Favoritos

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

Conteúdo educacional

BT