aspectj - 接口上的切入点未在实现类句柄

问题描述

我有以下代码,其中我的切入点基于界面上的注释。如果调用方法上的对象变量被定义为实现类,则它不起作用。但是如果我将(相同的对象)它转换为 Interface 那么它就可以工作了!!

package sample;
public interface MyInterface {
    @Write //runtime annotation
    public void methodA();
}

// In Write.java file
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface Write {

}
package sample;
public class MyImpl implements MyInterface {
    public void methodA() {
        System.out.println("MyImpl");
    }
}

两个方面定义为

@Aspect
public class MySimpleAspect {
    @Around("execution(public * sample.MyImpl.*(..))")
    public Object simpleAround(ProceedingJoinPoint point) throws Throwable {
        
        System.out.println("in Simple Aspect");
        return point.proceed();
      }
}
@Aspect
public class MyComplexAspect {
    @Around("call(@Write * sample.MyInterface+.*(..))")  // doesn't get invoked if <includes> is part of pom
    public Object complexAround(ProceedingJoinPoint point) throws Throwable {
        
        System.out.println("in complex Aspect");
        return point.proceed();
        
    }
}

测试类

package sample;

import org.junit.Test;

public class MyTest {
    
    @Test
    public void testMyImpl() {
        System.out.println("-- Using MyImpl.methodA() ---");
        MyImpl my = new MyImpl(); //does not work
        my.methodA();
        
        System.out.println("\n-- Using myinterface.methodA() ---");
        MyInterface myinterface = my; //works
        myinterface.methodA();
    }
}

输出

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Running sample.MyTest
-- Using MyImpl.methodA() ---
in Simple Aspect
MyImpl

-- Using myinterface.methodA() ---
in complex Aspect
in Simple Aspect
MyImpl
Tests run: 1,Failures: 0,Errors: 0,Skipped: 0,Time elapsed: 0.064 sec

更新

用更多代码输出更新了问题,并删除了 pom/maven 相关的东西,因为它原来是纯粹的 aspectj 问题而不是 maven

  • AspectJ 版本 1.9.6
  • AspectJ Maven 插件 1.11
  • JDK 1.8

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)