我有一个注释 @AppManaged,用于表示需要编织某些行为的类。编织的一种行为是将方法调用转换为并发 GPars(一个常规并行库)调用。
但是,我不希望建议对同一类进行嵌套方法调用。 所以...
@AppManaged
class someclass
{
public void method1(){
method2(); **// should not be advised**
}
public void method2(){
}
}
但是,如果方法调用是从 AppManaged 类到另一个类,那么应该建议它,因此 !cflowbelow(@within(AppManaged)) 之类的东西没有帮助。
@AppManaged
class Someotherclass
{
private someclass s;
public void method3(){
s.method2();**// Should be advised.**
}
}
基本上,我正在寻找一个切入点,它仅匹配同一对象实例中的嵌套调用,并防止它们被建议。
任何帮助将不胜感激。
感谢和问候 亚伯拉罕·梅纳切里。
最佳答案
怎么样:
pointcut appManagedExecution(Object appManaged) : execution(* (@AppManaged *).*(..)) && this(appManaged);
pointcut appManagedCall(Object called) : call(* (@AppManaged *).*(..)) && target(called);
pointcut routed(Object appManaged, Object called) : appManagedCall(called) && cflowbelow(appManagedExecution(appManaged)) && if(called != appManaged);
关于annotations - spectj - 如何查找带注释的类的方法正在调用同一类的另一个方法。即嵌套调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850182/