用弹簧编织/加载时间编织

mys*_*cks 4 java aspectj spring-aop

文档说明的是,该LTW具有通过使用来启动或者 <context:load-time-weaver/>XML指令或使用的@EnableLoadTimeWeaving注释.但是,我没有做过,但我仍然看到在我的项目中正确编织了各个方面!

  1. 在这种情况下,我不认为它们是在编译时编织的(但它们是?),所以它肯定是加载时间编织的?
  2. 即使是这种情况,它如何在加载时自动选择编织方面?如果没有像文档所说的那样使用上述方法之一打开这些方面,那么这些方面是否应该保持不变?
  3. 我在我的类路径中有了aspectj-weaver,但是这还不足以选择这些编织类型中的任何一种,是吗?

Aff*_*ffe 5

Spring AOP不依赖于AspectJ字节码编织.它只是借用了用于定义AspectJ项目方面的注释.它是一个单独实现的框架,它使用运行时代理来实现方面.如果您<aop:aspectj-autoproxy />在应用程序上下文中,那么spring正在使用代理来实现在容器中的bean上定义的受支持方面.

代理只能实现实际AspectJ系统的全部功能的子集,基本上是包装方法的建议.由于其性质,代理具有以下限制:

  • 仅拦截外部调用(同时破坏代理边界)
  • 上截取public只有成员(private/ protected不被截取)
  • 不知道本地电话(或用this或打电话super)

例如,如果您希望能够建议字段,则需要启用Native AspectJ.