Question

J'utilise AspectJ pendant un certain temps et il fonctionne très bien sur les champs de portée d'objets contenant des annotations. Je viens de rencontrer dans une situation où je veux annoter une variable de portée de la méthode qui fonctionnera avec mon pointcut mais je ne parviens pas à avec.

Voici le pointcut que je me sers. Il fonctionne très bien si ma variable est un champ de l'objet, mais si je réduis la portée d'une méthode (variable déclarée dans la méthode), il ne fonctionne plus et je ne sais pas pourquoi. Faites-moi savoir ce que je peux faire, merci.

 after(final Trigger trigger): set(@Triggereable * *) && args(trigger)
 {
  System.out.println("trigger flush");
 }

De plus, voici un exmaple de ce que je veux travailler. Ce System.out.println devrait tirer au-dessus lorsque le déclencheur est instancié:

public void foo()
{
   @Triggereable
   private Trigger trigger = new Trigger();
}
Était-ce utile?

La solution

AspectJ ne supporte pas pointcuts sur les variables locales (lire le FAQ entrée ).

Je me souviens d'une récente discussion sur une telle fonctionnalité peut-être ajouté bientôt, mais je ne pouvais pas trouver dans la section AspectJ numéro suivi ni dans le archives de liste de diffusion

Autres conseils

Si vous êtes venu à une telle situation, vous essayez probablement de changer la mise en œuvre au lieu d'appliquer des préoccupations transversales réelles. En fait, ce n'est pas ce que AOP et AspectJ est censé être utilisé pour.

En tant que travail autour, vous pouvez extraire soit des fonctionnalités pertinentes dans une méthode distincte, puis appliquez vos aspects à cette méthode ou bien, vous pouvez remplacer une méthode entière avec cette variable locale, autour de l'utilisation des conseils.

Plus sur, dans votre exemple particulier, le pointcut peut être appliqué à l'exécution du constructeur dans la portée d'une méthode donnée, de sorte que vous pouvez faire pratiquement la même chose sans se lier à une variable locale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top