Java AspectJ 1.9.4,带OpenJDK 11,不带Spring上下文,不作为依赖模块工作

Java AspectJ 1.9.4,带OpenJDK 11,不带Spring上下文,不作为依赖模块工作,java,aop,aspectj,Java,Aop,Aspectj,我正在尝试使用AspectJ创建自定义加载时注释,在没有Spring上下文的情况下打开JDK11。它在模块中运行良好,注释在类加载时编织,方面在运行时执行。没有问题,但当aspectJ实现模块时,该模块作为对另一个模块的依赖项添加。AspectJ和注释未被处理。我是否缺少任何配置 模块a @已记录 @继承的 @目标(方法) @保留(运行时) 公共@接口计数器{ 字符串名()默认为“”; } @方面 公共阶级对抗{ @关于(“执行(**.*(..)&&&@注释(计数器)”) public voi

我正在尝试使用AspectJ创建自定义加载时注释,在没有Spring上下文的情况下打开JDK11。它在模块中运行良好,注释在类加载时编织,方面在运行时执行。没有问题,但当aspectJ实现模块时,该模块作为对另一个模块的依赖项添加。AspectJ和注释未被处理。我是否缺少任何配置

模块a

@已记录
@继承的
@目标(方法)
@保留(运行时)
公共@接口计数器{
字符串名()默认为“”;
}
@方面
公共阶级对抗{
@关于(“执行(**.*(..)&&&@注释(计数器)”)
public void myBeforeLogger(处理连接点、连接点、计数器){
System.out.println(“好的-我们在前处理程序中…”);
System.out.println(“测试注释值为:”+counter.name().toString());
}
resources/META-INF/aop.xml


pom.xml


1.9.4
org.aspectj
aspectjweaver
${aspectj.version}
org.codehaus.mojo
aspectj maven插件
1.11
org.apache.maven.plugins
maven surefire插件
2.9
-javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
org.aspectj
aspectjweaver
${aspectj.version}
模块b

pom.xml


org.mymodule
模块a
1.0.0
公共类MyCounter{
@计数器(name=“呼叫计数”)
公共无效计数(){}
}
公共类MyCounterTest{
@试验
公共void testCount(){
MyCounter计数器=新的MyCounter();
counter.count();
//注意:我希望应该拦截模块a中的反方面。它不工作!!!!控制台中没有加载详细信息的aspectJ类。
}
}

我建议您创建一个具有一些预定义属性、依赖版本和插件配置的父POM。您的两个子模块(一个用于应用程序+测试,一个用于方面)可以使用这些定义,从而缩短子模块POM:


4.0.0
德斯克鲁姆大师

给你。你可以直接克隆它,而不是从这个答案中复制我的所有代码片段。

你检查过模块b的依赖关系吗?它是否包含AspectJ?谢谢你的建议。我已经添加并测试了我的特性,但我的特性没有被调用。在模块b上更新了pom.xml。这无助于你定义Surefire在加载时运行如果您的测试在第二个模块中,请在第一个模块上进行验证;-)谢谢@kriegaex。它成功了。非常感谢您的指导。它对Junits很好。如果我创建spark endpoint并调用这些方法,则不会处理注释。我如何在运行过程中附加Java代理。您可以通过命令行附加Java代理,就像您一样为测试而做。或者使用编译时编织而不是加载时。也可以通过Java代码附加它,但它只适用于附加编织代理后加载的类,而AOP的要点是,应用程序不需要知道横切关注点,那么为什么要从该代码中激活它呢申请?无论如何,这是一个新问题,不是什么评论。请打开一个新问题,像往常一样提供一个新的答案。