Java 原生 AOP |需要在 Aspect 中导入
Java native AOP | Imports in Aspect required
在 IntelliJ 中使用本机 AspectJ 时,我注意到一些奇怪的事情:如果我没有在相应的 class(es) 中使用的导入,则不会执行建议切入点。
例如,假设以下切入点:
public pointcut changeObject():
call(void MyObject.change());
建议的执行现在取决于我是否有 MyObject 的导入语句。如果它不存在,它编译没有错误,但我收到消息:
"Warning:(8, 0) ajc: no match for this type name: MyObject [Xlint:invalidAbsoluteTypeName]"
In this tutorial 他们不需要导入(IntelliJ 也将导入标记为不必要)。所以我想知道问题是什么。
我的设置:启用 AspectJ 插件的 IntelliJ Ultimate 2017.1。我安装了
AspectJ 1.8.10 并在 IDE 的编译器设置中引用了 Ajc 编译器。在项目结构中,我在 "Modules | Dependencies".
中引用了 aspectjrt.jar
我是否漏掉了任何东西,或者它是否与 Intellij 具有 not the best AspectJ support 这一事实有关?
在使用 AOP 插件在 eclipse 中测试了这种情况后,我找到了答案:有必要导入在切入点和建议中使用的 类。
目前,IntelliJ 确实没有很好的(本机)AOP 支持,因为 1) 它不建议导入切入点中使用的 类,而是 2) 表示它们未被使用(并且实际上删除了他们在优化导入时)。此外,eclipse 显示 "no match for this type name" 警告,而 IntelliJ 则没有。最后,在突出显示建议的代码部分方面也很出色。
在 IntelliJ 中使用本机 AspectJ 时,我注意到一些奇怪的事情:如果我没有在相应的 class(es) 中使用的导入,则不会执行建议切入点。 例如,假设以下切入点:
public pointcut changeObject():
call(void MyObject.change());
建议的执行现在取决于我是否有 MyObject 的导入语句。如果它不存在,它编译没有错误,但我收到消息: "Warning:(8, 0) ajc: no match for this type name: MyObject [Xlint:invalidAbsoluteTypeName]"
In this tutorial 他们不需要导入(IntelliJ 也将导入标记为不必要)。所以我想知道问题是什么。
我的设置:启用 AspectJ 插件的 IntelliJ Ultimate 2017.1。我安装了 AspectJ 1.8.10 并在 IDE 的编译器设置中引用了 Ajc 编译器。在项目结构中,我在 "Modules | Dependencies".
中引用了 aspectjrt.jar我是否漏掉了任何东西,或者它是否与 Intellij 具有 not the best AspectJ support 这一事实有关?
在使用 AOP 插件在 eclipse 中测试了这种情况后,我找到了答案:有必要导入在切入点和建议中使用的 类。
目前,IntelliJ 确实没有很好的(本机)AOP 支持,因为 1) 它不建议导入切入点中使用的 类,而是 2) 表示它们未被使用(并且实际上删除了他们在优化导入时)。此外,eclipse 显示 "no match for this type name" 警告,而 IntelliJ 则没有。最后,在突出显示建议的代码部分方面也很出色。