AspectJ-为什么使用注释而不是ajc编译器



我们既可以使用@AspectJ注释样式来定义方面,也可以使用AspectJ Java扩展语言,这需要我们使用ajc编译器。

人们想要使用注释样式而不是ajc的原因是什么?在我看来,使用注释样式放弃了很多功能,但除了不必使用ajc(必须使用ajc有什么不好的?)之外,没有获得多少(如果有的话)

有人能就这个话题启发我吗?

两种样式(.aj@AspectJ)都具有其他样式无法实现的功能。

请参阅这篇文章,了解注释可以做一些声明性AspectJ不能做的事情:覆盖参数的AspectJ解密语法是什么

.aj文件在大多数情况下(除了上面提到的)可以做得更多。最值得注意的是,它们可以执行ITD(Inter-Type Definitions,又称为向类添加方法和属性)。

您想要使用@AspectJ的最大原因是,如果您使用Spring代理AOP支持,它甚至不需要编译时编织(CTW),甚至不需要加载时(LTW)。Spring将模仿@AspectJ,但在运行时会创建代理。

我注意到Spring、Eclipse(以及我自己)似乎在鼓励更多地使用真正的AspectJ。我相信这是因为Eclipse插件已经变得非常好了。此外,使用真正的AspectJ和@Configurationannotation,您可以在实例化的bean上获得Spring连接。这就是Spring Roo的工作原理。

使用Eclipse AspectJ IDE插件,您可以看到对这两种样式(@和aj)的切入点引用,并非常清楚地了解发生了什么"神奇"。

在构建过程中添加一些额外的步骤并不是最简单和好的方法。尤其是当你有大项目的时候。您放弃了所有的java工具和IDE支持,它们可能不支持*.aj语法。

最新更新