我们既可以使用@AspectJ 注解样式来定义切面,也可以使用AspectJ Java 扩展语言,这需要我们使用ajc 编译器。
人们想要使用注释样式而不是 ajc 的原因是什么?在我看来,使用注释样式放弃了很多功能,但除了不必使用 ajc 之外,并没有获得太多(如果有的话)(必须使用 ajc 有什么不好?)
有人可以请教我这个话题吗?
两种样式(.aj和@AspectJ)都具有另一种无法做到的功能。
有关注释可以做而声明性 AspectJ 不能做的事情,请参阅这篇文章:What is the AspectJ declaritive syntax for overwriteing an argument
.aj文件大部分(除了上面提到的)可以做更多的事情。最值得注意的是,他们可以执行 ITD(Inter-Type-Definitions 也就是向类添加方法和属性)。
您想要使用 @AspectJ 的最大原因是,如果您使用 Spring 代理 AOP 支持,它甚至不需要编译时编织 (CTW) 甚至加载时间 (LTW)。Spring 将模仿@AspectJ,但在运行时通过创建代理。
我注意到 Spring、Eclipse(和我自己)似乎鼓励更多地使用真正的 AspectJ。我相信这是因为 Eclipse 插件变得如此出色。同样使用真正的 AspectJ 和 @Configurable 注释,您可以在实例化的 bean 上获得 Spring 连接。这就是 Spring Roo 的工作原理。
使用 Eclipse AspectJ IDE 插件,您可以看到对两种样式(@ 和 aj)的切入点引用,并非常清楚地了解正在发生的“魔术”。
在构建过程中添加一些额外的步骤并不是最简单和好的方法。特别是当您有大型项目时。您摆脱了所有可能不支持 *.aj 语法的 java 工具和 IDE 支持。