BT

A sua opinião é importante! Por favor preencha a pesquisa do InfoQ!

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

| por Srini Penchikala Seguir 17 Seguidores , traduzido por Douglas Masson Seguir 0 Seguidores em 07 jan 2009. Tempo estimado de leitura: 3 minutos |

Para melhorar a experiência das pessoas que acessam o InfoQ Brasil, nós criamos uma série de funcionalidades que te permitem ficar pode dentro das últimas tendências e das novidades de seu interesse, sem que você seja incomodado por coisas irrelevantes. Receba e-mails periódicos e notificações sobre seus tópicos 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

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

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT