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

时间:2014-01-31 04:58:20

标签: java aspectj spring-aop

docs解释说,LTW必须通过使用<context:load-time-weaver/> xml指令或使用@EnableLoadTimeWeaving注释来启用。但是,我没有做过,但我仍然看到在我的项目中正确编织了各个方面!

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

1 个答案:

答案 0 :(得分:5)

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

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

  • 仅在外部呼叫上拦截(在破坏代理边界时)
  • 仅对public成员进行
  • 拦截(private / protected无法截获)
  • 不知道本地电话(或使用thissuper来电)

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