Grails: Executando métodos apenas em produção usando AOP

View Code

Durante o desenvolvimento de uma aplicação Grails surgiu a necessidade de alguns métodos serem executados somente em ambiente de produção. Notei que acabávamos tendo que repetir o mesmo código no início de todo método que gostaríamos que tivesse esse comportamento.

Pesquisei como poderia interceptar um método através de uma anotação customizada. Encontrei algumas soluções, mas a que mais achei interessante foi utilizando Spring AOP. Vamos lá!

1. Crie uma anotação

Crie uma anotação customizada. Se ainda não está familiarizado com anotações esse post vai te ajudar.

2. Aplique a anotação no método a ser interceptado

Aplique a anotação nos métodos que deseja que sejam executados apenas em produção.

3. Crie o interceptador

  • (1) Indique que a classe é um aspecto do Spring AOP usando a anotação @Aspect
  • (2) A anotação @Around  indica o tipo de advice utilizado. O Around Advice permite manipularmos o antes e o depois da execução do método interceptado. Essa anotação recebe como argumento um expressão. Chamamos essas expressões de pointcut expressions. No nosso caso a expressão indica que todos os métodos anotados com @ProductionOnly  serão interceptados pelo método foo . Veja outros exemplos de pointcut expressions aqui.
  • (3) Verifica se o atual ambiente não é produção. Em caso verdadeiro não executa o método interceptado.
  • (4) Se o ambiente for de produção chama-se o método proceed  para executar o método interceptado.

4. Registre o bean interceptador

Para tudo funcionar registre o bean no resources.groovy  da sua aplicação Grails

5. Teste

Rode a aplicação de exemplo e acesse /message/productionOnly  em ambiente de desenvolvimento e depois em ambiente de produção. Você notará que somente em ambiente de produção será renderizado OK indicando que o método interceptado rodou normalmente.

*

Spring AOP é mais uma das cartas na manga que você pode ter enquanto desenvolvedor Grails. Está ai mais um bom motivo para você começar a estudar Spring e entender melhor como funcionam algumas coisas mágicas no Grails. Um material muito bacana é o guia de Spring da itexto. Leia também a documentação oficial do Grails a respeito do Spring.

E ai? Já havia usado Programação Orientada a Aspecto? Deu para provar um pouco do poder desse recurso? Então compartilhe nos comentários outros usos da AOP 😉

Referências:

Simple Aspects using Annotations in Grails

Intercept Grails Service class method calls