2010-10-05 5 views
4

Comment est-ce que je peux exprimer une coupure de point qui trouve des méthodes seulement en étant appelé d'une autre méthode, mais pas directement?AspectJ confusion avec pointcut

Par exemple:

Foo() calls Bar() calls object.Method() 

également

NotFoo() calls Bar() calls object.Method() 

Je veux seulement pointcut de travailler pour l'intérieur Foo()

J'ai essayé "withincode", mais qui semble que le travail directement.

Merci Eric

Répondre

4

Ce que vous voulez exige en fait deux points de jonction:

  1. méthode call ou constructeur de la classe Bar et être within classe Foo ou éventuellement constructeur Foo() avec withincode désignateur. Le conseil à ce point de jointure peut par exemple définir un drapeau à true lorsqu'il est appelé depuis Foo() et falso sinon. Ce variabel peut être stocké dans un HashMap avec le thread comme clé pour éviter les problèmes de concurrence.
  2. withincode Constructeur Bar() ou dans la classe Bar et call object.Method(). Le conseil à ce joinpoint doit également vérifier si l'indicateur est défini sur true. Et définissez à nouveau le drapeau Foo sur false.
+1

Je pense que cflow et cflowbelow sont simplement conçus pour gérer ce type de marquage dans le flux d'exécution. – PomCompot