Mise en oeuvre d’AspectJ avec Maven

Le but de ce post est d'illustrer comment intégrer AspectJ dans un projet Maven.

Qu'est-ce qu'un Aspect ?
Un aspect est une entité logicielle qui permet de modulariser une fonctionnalité transversale d'une application.La programmation orientée aspect permet de découpler des préoccupations transversales, du code métier de l'application. Par exemple le système de journalisation peut-être traité par les aspects.Les trois éléments principaux définis dans un aspect sont les pointcuts (points de coupe) , les codes advice (greffon) et joint point (point de jonction).

Qu'est-ce que c'est AspectJ ?
AspectJ est une extension permettant la programmation orientée aspect, pour le langage Java. Il permet de déclarer des aspects, des coupes, des codes advices et des introductions. Il offre aussi un tisseur d'aspect appelé ajc (pour AspectJCompiler) qui prend en entrée des classes java et des aspects, et produit en sortie des classes dont le comportement est augmenté par les aspects.

Qu'est-ce que c'est AspectJ Maven Plugin ?
Il permet de tisser toutes les classes en utilisant le compilateur AspectJ (ajc) pendant la compilation. Consultez ce site http://mojo.codehaus.org/aspectj-maven-plugin/index.html afin d'avoir davantage d'informations.

Étape 1 :
Ajouter les dépendences de l'AspectJ dans le fichier pom.xml.

<!-- dépendance aspectj -->
   <dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjrt</artifactId>
        <version>1.7.3</version>
  </dependency>
 
<!-- le tissage -->
  <dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
        <version>1.7.3</version>
 </dependency>

Étape 2 :
Mettre en place le plugin maven pour Aspectj dans le fichier pom.xml.

<build>
<plugins>
 <plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>aspectj-maven-plugin</artifactId>
      <version>1.5</version>
	<executions>
	       <execution>
			<goals>
			<!--  tisser toutes les classes principales-->
			<goal>compile</goal>
			<!-- tisser tous les tests unitaires -->
			<goal>test-compile</goal>
			</goals>
		</execution>
	</executions>
</plugin>
</plugins>
</build>

Ainsi, les options pour optimiser ce plugin pourraient être ajoutés, par exemple :

  • showWeaveInfo : afficher les message du tissage. La valeur par défaut est « true ».
  • deprecation : afficher l'avertissement sur les méthodes marquées comme « @deprecated ». La valeur par défaut est « true ». 
  • complianceLevel : définit la version de java utilisée pour la compilation comme 1.5, 1.6 et 1.7.
  • enc : définit l'encodage du code.

Étape 3 :
Créer l'aspect dont la méthode « executeTest » n'est appliquée que lorsque la méthode « test » est appelée.
AspectjDemo.java :

@Aspect
public class AspectjDemo
{
	private final Logger log = LoggerFactory.getLogger(AspectjDemo.class);

	/**
	 * Cette méthode est appelée à chaque fois avant 
	 * la méthode test() de la classe Demo
	 */
	@Before("execution (* demo.Demo.test())")
	public void callSaveMethode() 
	{
		log.info("[AspectJ] Log avant test");
	}
}

Demo.java :

package demo ;

public class Demo
{
	private final Logger log = LoggerFactory.getLogger(Demo.class);
	
	public void test()
	{
		log.info("Test");
	}
}

Lancer la commande « mvn clean install» et on pourra voir que les codes sont tissés et le point de coupe est aussi trouvé pendant la compilation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.