AspectJ - 为什么使用注释而不是 ajc 编译器?
我们既可以使用@AspectJ注解风格来定义切面,也可以使用AspectJ Java扩展语言,这需要我们使用ajc编译器。
人们想要使用注释样式而不是 ajc 的原因是什么?在我看来,使用注释样式放弃了很多功能,但除了不必使用 ajc 之外,并没有获得太多(如果有的话)(必须使用 ajc 有什么不好?)
有人可以启发我吗 ?关于这个话题?
We can use both @AspectJ annotation style to define aspects, as well as the AspectJ Java extension language, which requires us to use the ajc compiler.
What are the reasons that one would want to use the annotation style instead of ajc? It seems to me that a lot of functionality is given up by using annotation style, but not much (if anything) is gained, other than not having to use ajc (what's so bad about having to use ajc?)
Could someone please enlighten me on this topic?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
两种样式(.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)的切入点引用,并非常清楚地了解正在发生的“魔法”。
Both styles (.aj and @AspectJ) have features that the other cannot do.
See this post for something the annotations can do that declarative AspectJ cannot: What is the AspectJ declaritive syntax for overwritting an argument
The .aj files for the most part (other than mentioned above) can do way more.
Most notable they can do ITDs (Inter-Type-Definitions aka adding methods and properties to classes).
The biggest reason you would want to use the @AspectJ is that it does not even require compile time weaving (CTW) or even load time (LTW) if you use Spring proxy AOP support. Spring will mimic @AspectJ but at runtime by creating proxies.
I have noticed that Spring, Eclipse (and myself) seem to be encouraging greater use of true AspectJ. I believe this is because the Eclipse plugin has gotten so good. Also with true AspectJ and the @Configurable annotation you can get Spring wiring on instantiated beans. This is how Spring Roo works.
With the Eclipse AspectJ IDE plugin you can see the pointcut references to both styles (@ and aj) and get a very clear idea of what "magic" is happening.
在构建过程中添加一些额外的步骤并不是最简单和最好的方法。尤其是当你有大型项目时。您放弃所有 java 工具和 IDE 支持,它们可能不支持 *.aj 语法。
Adding some additional step to your build process is not the easiest and good way. Especially when you have large project. You go away from all java tools and IDE support, which may not supports *.aj syntax.