2011-08-26 4 views
2

Je voudrais correspondre à une méthode comme ceci:Comment faire correspondre une méthode avec un argument annoté AspectJ

@Foo 
public void boo(@Baz Bar bar) { ... } 

En gros:

  • la méthode a une annotation @Foo (que je correspondance avec execution(@Foo * *(..)) && @annotation(foo)),
  • peut avoir une quantité variable de paramètres,
  • et l'un d'entre eux devrait avoir une annotation @Baz,Je dois continuer à travailler avec cet argument annoté (bar).

Si une méthode a une annotation @foo mais il manque une annotation @Baz, je veux obtenir une erreur le plus tôt possible, si possible lors du tissage et non lors de l'exécution.

Comment puis-je faire cela?

Répondre

2
public pointcut annArg(): execution(@Foo * *(.., @Baz (*),..)); 

declare error :execution(@Foo * *(..))&&!annArg() :"error"; 

Malheureusement, il est impossible de récupérer l'argument correspondant par les arguments (.., arg, ..). Mais vous pouvez utiliser thisJoinPoint.getArgs() et l'API de réflexion pour obtenir l'argument annoté. Ou si vous connaissez la position de l'argument, vous pouvez utiliser quelque chose comme args (.., arg);

Questions connexes