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

问题描述

| 我们可以使用@AspectJ批注样式来定义方面,也可以使用AspectJ Java扩展语言来定义方面,这需要我们使用ajc编译器。 为什么要使用注释样式而不是ajc的原因是什么?在我看来,通过使用注释样式放弃了许多功能,但是除了不必使用ajc之外,没有获得太多的功能(如果有的话)(必须使用ajc有什么不好吗?) 有人可以启发我这个话题吗?     

解决方法

两种样式(.aj和@AspectJ)均具有其他样式无法实现的功能。 请参阅这篇文章,了解注释可以完成声明式AspectJ无法做到的事情:重写参数的AspectJ声明性语法是什么? .aj文件大部分(除了上面提到的以外)可以做更多的事情。 最值得注意的是,他们可以执行ITD(类型间定义,也就是向类中添加方法和属性)。 您想使用@AspectJ的最大原因是,如果您使用Spring代理AOP支持,它甚至不需要编译时编织(CTW)甚至不需要加载时间(LTW)。 Spring将模仿@AspectJ,但在运行时会通过创建代理来模仿。 我注意到,Spring,Eclipse(和我本人)似乎鼓励更多使用真正的AspectJ。我相信这是因为Eclipse插件变得非常好。同样,使用真正的AspectJ和@Configurable批注,您可以在实例化的bean上进行Spring接线。这就是Spring Roo的工作方式。 使用Eclipse AspectJ IDE插件,您可以看到两种样式(@和aj)的切入点引用,并且可以很清楚地了解正在发生的“魔术”。     ,在您的构建过程中添加一些额外的步骤并不是最简单和好的方法。特别是当您有大型项目时。您将摆脱所有Java工具和IDE支持,后者可能不支持* .aj语法。