aspectj - 如何查找带注释的类的方法是调用同一个类的另一个方法。即嵌套调用

时间:2011-01-31 11:10:20

标签: annotations aspectj

我有一个注释@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.** 
     } 
} 

基本上我正在寻找一个切入点,它只匹配同一对象实例中的嵌套调用,并防止它们被建议。

任何帮助都将受到高度赞赏。

谢谢和问候 Abraham Menacherry。

1 个答案:

答案 0 :(得分:4)

怎么样:

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);