在IntelliJ中使用原生AspectJ时,我注意到一些奇怪的事情:如果我没有在相应的切入点中使用的类的导入,则不会执行建议。 例如,假设以下切入点:
public pointcut changeObject():
call(void MyObject.change());
现在,建议的执行取决于我是否有 MyObject 的import语句。如果它不存在,它编译没有错误,但我收到消息: “警告:(8,0)ajc:此类型名称不匹配:MyObject [Xlint:invalidAbsoluteTypeName]”
In this tutorial他们不需要导入(IntelliJ也标记导入是不必要的)。所以我想知道问题是什么。
我的设置:启用了AspectJ插件的IntelliJ Ultimate 2017.1。我安装了 AspectJ 1.8.10并在IDE的编译器设置中引用了Ajc编译器。在项目结构中,我引用了“模块|依赖关系”中的aspectjrt.jar。
我是否遗漏了任何内容,或者是否与Intellij not the best AspectJ support的事实有关?
答案 0 :(得分:0)
在使用AOP插件在eclipse中测试了这种情况后,我找到了答案:有必要导入在切入点和建议中使用的类。
目前,IntelliJ确实没有很好的(本机)AOP支持1)它不建议导入在切入点中使用的类,而是2)信号它们未被使用(实际上在优化导入时删除它们)。此外,eclipse显示了“这种类型名称不匹配”的警告,IntelliJ没有这样做。最后,它突出了推荐的代码部分的方式也是优越的。