O plugin do AspectJ é utilizado com o maven para adicionar nos projetos uma extensão aos principios da OO, nesse contexto a Programação Orientada a Aspecto, prometo suprir alguns requisitos que a Orientação a Objetos é deficiente, pois permite separar em tempo de projeto requisitos funcionais de requisitos não funcionais.
Vamos ver nesse exemplo, como configurar o plugin do AspectJ para projetos Maven.
A configuração dentro do pom.xml é bem fácil, basta adicionar na sessão plugins o seguinte trecho:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.4</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> </plugin>
Uma vez o plugin configurado, o próximo passo é a criação do Aspecto, onde definimos o pointcut, ou seja, toda vez que um método de Objeto da Aplicação for chamado e seja executado algo, como por exemplo o registro de um log, definimos atraves de regras da programação orientada a aspecto.
Segue o exemplo de um código de Aspecto:
public aspect Logging { // Definicao de Pointcut pointcut logOnExecuteSet(): execution (public String print*()); before(): logOnExecuteSet() { System.out.println("Entering: " + thisJoinPoint); } after() returning: logOnExecuteSet() { System.out.println("After Returning: " + thisJoinPoint); } }
Estamos definindo um pointcut para o todo método que possui a seguinte Assinatura: public String print*(), ou seja, todo método chamado, que se inicia por public String print* sem parâmetro, teremos a invocação do aspecto pelo mecanismo de runtime do AspectJ.
No exemplo mostrado, toda ver que o método print* for chamado, teremos antes da execução do método a execução do before() e após a execução do método a chamada a after().
Uma vez configurado o projeto e o aspecto criado, já podemos executar um teste para ver como é o funcionamento do uso da API.
Primeiro vamos compilar o programa, para isso, digitar o comando:
mvn package
O programa será compilado, em seguida vamos utilizar o plugin exec, para executar programas em java, modo standalone:
mvn exec:java
Será exibida a mensagem abaixo, indicando que está tudo correto:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building JarExample 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) @ JarExample >>> [INFO] [INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) @ JarExample <<< [INFO] [INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ JarExample --- Entering: execution(String br.com.javadev.aspectj.HelloWorld.printHello()) After Returning: execution(String br.com.javadev.aspectj.HelloWorld.printHello()) RET: Hello ! Javadev [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.478s [INFO] Finished at: Fri Jul 12 14:28:27 BRT 2013 [INFO] Final Memory: 2M/15M [INFO] ------------------------------------------------------------------------
Para fazer o download do exemplo, clique em: Exemplo do tutorial.