Bonjour,
Les aspects, je les utilise pour la première fois avec AspectJ 1.6.8 et Eclipse mis à jour avec AJDT 2.0.2.
J'ai créé un project de type AspectJ, et créé un premier aspect avec cet objectif:
Faire que tous les appels de méthodes get, is et has faits dans un objet implémentant l'interface CheckableObject (que j'ai définie pour mes besoins propres) débutent par un appel d'une méthode check() qu'elle déclare.
pour cela, j'ai essayé ceci:
Cela,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /** * Checkable objects verify their invariants before giving access to their getters, has or is functions. */ public aspect CheckableObjects { /** Each public get, has or is method is targeted. */ pointcut verify(CheckableObject c): this(c) && within(CheckableObject+) && (call(public * *.get*()) || call(public boolean *.is*()) || call(public boolean *.has*())); before(CheckableObject c) : verify(c) { c.check(); }; }
Et même de dépit, pour en avoir le coeur net:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public aspect CheckableObjects { /** Each public get, has or is method is targeted. */ pointcut verify(): within(CheckableObject+) && (execution(public * *.get*()) || execution(public boolean *.is*()) || execution(public boolean *.has*())); before(CheckableObject c) : verify() && target(c) { c.check(); }; }
Mais le résultat est toujours le même: un avertissement m'apparaît sous Eclipse: "advice defined in CheckableObjects has not been applied [Xlint:adviceDidNotMatch]".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pointcut verify(): call(* *.*()); before() : verify() { };
Pourtant, dans mes autres projets java, du même workspace, les classes ne semblent pas manquer où cet aspect devrait s'appliquer. Alors, que se passe t-il?
L'ai-je mal écrit?
Sous Eclipse, le projet qui contient l'aspect est un projet AspectJ. Mais les autres, cibles des aspects, restent des projets Java normaux. Dois-je les convertir?
J'ai mis en dépendance de mes projets Java le projet AspectJ, mais sans succès.
Quelques idées vous viennent-elles à l'esprit pour m'aider? Je dois faire une faute de néophyte quelque-part. Mais bien sûr à mes premières heures, je tourne en rond.
En vous remerciant,
Grunt.
Partager