0
我想記錄我在代碼中使用AspectJ在記錄器中生成的所有方法調用。Aspectj - 如何從相同的建議中調用建議的方法,而不會觸發無限循環
@Aspect
public class Logger
{
// Point Cuts
//-----------
@Pointcut("execution(* org.myDomain.*..*.*(..))")
public void selectAll(){}
@Pointcut("within(Logger) && call(* *(..))")
public void codeWithinAspect(){}
// Advices
//-----------
@Before("selectAll()")
public void adviceThatWorksFine(JoinPoint joinPoint)
{
System.out.print(joinPoint.getSignature().toString());
//Utils.printToConsole(joinPoint.getSignature().toString());
}
@Before("selectAll() && !codeWithinAspect")
public void adviceWithInfiniteLoop(JoinPoint joinPoint)
{
//System.out.print(joinPoint.getSignature().toString());
Utils.printToConsole(joinPoint.getSignature().toString());
}
}
班上第一個忠告工作正常(它的每一個方法調用寫入控制檯),調用org.myDomain.utils.Utils.printToConsole()方法時,這是第二個建議將導致一個無限循環通過電話諮詢建議。
我發現這是一個常見的問題,如鏈接 http://www.eclipse.org/aspectj/doc/released/faq.php#q:infiniterecursion 所述,但我無法理解如何編寫切入點,因此無法創建無限循環。
plaes幫助
感謝,它的工作原理,甚至更好地與adviceexecution – Tal 2014-10-30 14:09:42