annotations - spectj - 如何查找带注释的类的方法正在调用同一类的另一个方法。即嵌套调用

标签 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.** 
     } 
} 

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

任何帮助将不胜感激。

感谢和问候 亚伯拉罕·梅纳切里。

最佳答案

怎么样:

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/

相关文章:

java - AspectJ 切入点匹配模式

java - 如何在构造函数上使用 @Autowired DI Autowiring 未定义 bean 的属性?

java - Gradle - 在编译期间执行自定义注释处理器

java - 使用 Javassist 向类添加注释

java - 具有至少一个任意类型注释的方法的切入点

java - 理解切入点并访问advice中的注释参数

java - Spring Security 中奇怪的 spring 使用

annotations - Glassfish 上的 Spring Boot

java - 是否可以使用 aspectj 捕获所有异常?

java - 如何在 Gradle 项目中使用带有 Profiled 注释的 Perf4J?