AspectJ, la Programmation Orientée Aspects en Java

Aspect J est une extension Java pour implémenter la Programmation Orienté-Aspect (POA), une technique qui modularise les "concerns" transversaux, autrement dit permet d'appliquer un même processus à différents programmes.

AspectJ existe depuis 2001 et la POA est développée par le Palo Alto Research Center depuis 1994. Ici l'unité n'est pas la classe, mais un concern, qui se partage entre plusieurs classes. Les concerns peuvent être des propriétés, des zones d'intérêt d'un système et la POA décrit leurs relations, les compose ensemble dans un programme. Les aspects encapsulent un comportement commun à plusieurs classes.
Les aspects d'un système peuvent être insérés, changés, supprimés au stade de la compilation.

La différence entre un aspect et une classe peut s'exprimer par un exemple. Supposons que la gestion de l'enregistrement des utilisateurs soit une classe, elle est alors composée de méthodes utilisée par chaque programme qui utilise le package. Mais si l'enregistrement des utilisateurs est un "concern", alors il se mêle aux autres packages de chaque programme qui les utilisent. Comme la classe, il peut être remplacé par un concern différent. Le concern prévoit l'interaction avec les autres processus alors que la classe ne connait que ses propres attributs.

L'utilisation d'AspectJ peut réduire considérablement la taille d'un programme sans perte de performance, et simplifie la conception d'autant. Elle améliore la modularité et la réusabilité du code. Elle est particulièrement utile pour déboguer de grands projets.

Ajouter la POA à Java

L'apport d'aspects au code Java se fait selon les principes suivants:

  1. Supplément à Java: peut être ajouté à un programme existant (et remplacer un tas de code ou lui ajouter des contrôles ou traitements de deboguage).
  2. Les join points représentent des points défini dans l'exécution d'un programme, tels l'appel d'une méthode, la réalisation d'une exception, et ainsi de suite.
  3. Un join point peut contenir d'autres join points.
  4. Un pointcut est un construct qui comprend un ensemble de join points, selon un critère donné. Par exemple l'ensemble des méthodes à l'exécution d'un package.
  5. L'advice est le code qui est exécuté avant, après, ou pendant un join point.
  6. Le compilateur ajc génère à partir d'un source AspectJ, soit un source .java ou directement un fichier bytecode .class.
  7. Le code AspectJ peut être réutilisé dans d'autres programmes.

Exemple de code

Cet aspect concerne l'exécution de chaque méthode dans le programme Eclipse.
Un advice execute quelque code avant l'appel et un autre advice quelque code après l'appel.

public aspect xxxx
{
   pointcut anyMethod() : 
           execution (* org.eclipse.. *(..));
   before(): anyMethod()
   {
     ... quelque code...
   }
   after() : anyMethod()
   {
     ... quelque code...
   } 
} 

Outils et documentation

Mis à jour en juillet 2014.