用弹簧编织/加载时间编织
文档解释说,LTW必须通过使用 xml指令或使用
@EnableLoadTimeWeaving
注释来@EnableLoadTimeWeaving
。 但是,我没有做过,但我仍然看到在我的项目中正确编织了方面!
- 在这种情况下,我不认为它们是在编译时编织的(但它们是吗?),所以它肯定是加载时间编织的?
- 即使是这种情况,它如何自动选择在加载时间内编织方面? 如果没有像文档所说的那样使用上述方法之一打开这些方面,那么这些方面是否应该保持不变?
- 我在我的类路径中有了aspectj-weaver,但是这还不足以选择这些编织类型中的任何一种,是吗?
Spring AOP不依赖于AspectJ字节码编织。 它只是借用了用于定义AspectJ项目方面的注释。 它是一个单独实现的框架,它使用运行时代理来实现方面。 如果在应用程序上下文中有
,那么spring正在使用代理来实现在容器中的bean上定义的受支持方面。
代理只能实现实际AspectJ系统的全部function的子集,基本上是包装方法的建议。 由于它们的性质,代理具有以下限制:
- 仅拦截外部呼叫(同时破坏代理边界)
- 仅对
public
成员进行拦截(private
/protected
不能被截获) - 不知道本地电话(或使用
this
或super
电话)
例如,如果您希望能够建议字段,则需要启用Native AspectJ 。