我想使用 AspectJ 捕获 com.ABC.MyClass 中的所有方法执行
package com.ABC
public class MyClass{
public methodA(){
}
public methodB(){
methodA();
}
}
以下是看点:
@Aspect
public class MyAspect{
@Pointcut("execution(* com.ABC.MyClass.*(..))")
public void captureMyClassMethods(){
}
@Around("captureMyClassMethods()")
public Object aroundMyClassMethods(ProceedingJoinPoint jp) throws Throwable{
MyClass object = (MyClass)jp.getTarget();
object.methodA(); //This causes infinite loop
Object o = jp.proceed();
System.out.println("Some data from o");
return o;
}
}
正如 around advice 的评论中提到的,从 advice 调用 methodA() 会导致无限循环。
正如在另一个 stackoverflow 答案中提到的 Aspectj - 如何在不触发无限循环的情况下从相同的建议中调用建议的方法 如果我更改下面的切入点表达式,那么当从 methodB( ) 因为它将在方面控制流程。
@Pointcut("execution(* com.ABC.MyClass.*(..)) && !cflow(within(MyAspect))")
我能想到的另一种方法是使用 before 和 after advices 而不是 around advices。但我想知道是否有办法通过 around advice 来处理这个问题?