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

时间:2011-05-23 20:37:23

标签: java aspectj aop aspects

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

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

有人可以请教我这个话题吗?

2 个答案:

答案 0 :(得分:4)

两种风格( .aj @AspectJ )都具有另一种无法完成的功能。

请参阅这篇文章,了解注释可以做的事情,声明性的AspectJ不能:What is the AspectJ declaritive syntax for overwritting 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)的切入点引用,并清楚地了解正在发生的“魔法”。

答案 1 :(得分:2)

为构建过程添加一些额外步骤并不是最简单和最好的方法。特别是当你有大型项目时。您远离所有Java工具和IDE支持,它们可能不支持* .aj语法。

相关问题