正如我从春季3文档中得到的那样,AOP有两种方式
AspectJ - 包含xml中的<aop:config>
元数据或使用注释@Aspect
Spring自己的实现 - 使用接口提供建议(BeforeAdvice
,AfterAdvice
等)
- 如果我错了,请纠正我 -
现在,spring自己的实现由AutoproxyCreator
(BeanNameAutoproxyCreator
,DefaultAdvisorAutoproxyCreator
)实现,它在使用BeanPostProcessor
创建bean时创建代理。
但是如何在Spring中完成AspectJ的代理。如何由@Aspect
由
<aop:config>
<aop:aspect ref= "anyclasshavingAllAdviceMethod">
<!-- (all aop:before,aop:after-throwing etc) -->
</aop:aspect>
</aop:config>
用于创建代理。实施<aop:config>
或@Aspect
背后的机制是什么?
或加载时间waever用于这些。
注意:实现aop:config我们不必提供任何额外的bean或load-time-weaver然后它是如何工作的?
答案 0 :(得分:0)
这里有几个不同的区别。
@AspectJ
- Style Spring AOP @AspectJ
- 样式AspectJ 两种版本的Spring AOP都是使用BeanPostProcessors和代理实现的。
AspectJ的两种风格都是在编译时(字节代码操作或单独编译)或类加载时(使用加载时编织器时)实现的。
Spring AOP的现代版本和AspectJ的现代版本共享@AspectJ
- 语法,但它们不能相互混淆:Spring AOP仅适用于使用代理的Spring Beans,因此只能拦截方法从外部调用。 AspectJ更改了方法的实际字节代码,因此完全独立于Spring。
如果您想了解有关不同技术和口味的更多信息,我建议使用Spring Committer和AspectJ Guru AspectJ in Action预订Ramnivas Laddad。
您还应该阅读:Spring Reference: 8.4. Choosing which AOP declaration style to use