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

文档解释说,LTW必须通过使用 xml指令或使用@EnableLoadTimeWeaving注释来@EnableLoadTimeWeaving 。 但是,我没有做过,但我仍然看到在我的项目中正确编织了方面!

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

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

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

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

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