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