docs解释一下,必须通过使用 <context:load-time-weaver/>
来启用 LTW xml指令或使用@EnableLoadTimeWeaving
注解。然而,我两者都没有做过,但我仍然看到我的项目中的方面是正确编织的!
- 在这种情况下,我不认为它们是在编译时编织的(但它们是吗?),所以肯定是加载时编织?
- 即使是这样,它如何在加载期间自动选择编织方面?如果没有使用文档所说的上述方法之一打开这些方面,它们不应该保持未编织状态吗?
- 我的类路径中有 aspectj-weaver,但无论如何都不足以选择这两种编织类型,对吗?
最佳答案
Spring AOP 不依赖AspectJ 字节码编织。它只是从 AspectJ 项目中借用了用于定义方面的注解。它是一个单独实现的框架,使用运行时代理来实现方面。如果你有 <aop:aspectj-autoproxy />
在您的应用程序上下文中,spring 使用代理来实现在容器中的 bean 上定义的受支持的方面。
代理只能实现实际AspectJ 系统全部功能的子集,基本上是包装方法的建议。由于其性质,代理具有以下限制:
- 仅拦截外部调用(同时违反代理边界)
- 拦截
public
仅限成员(member)(private
/protected
无法拦截) - 不知道本地电话(或使用
this
或super
的电话)
例如,如果您希望能够为字段提供建议,则需要启用 Native AspectJ 的使用.
关于java - 编译/加载时间用 Spring 编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472679/