这里还有两点需要澄清
我的帖子中的第一个实际上是加载时间编织而不是运行时间编织
由此 链接
的 加载时间编织(LTW) 强> 简单地说是二进制编织,直到类加载器加载类文件并将类定义到JVM。为了支持这一点,需要一个或多个“编织类加载器”,它们由运行时环境明确提供或通过“编织代理”启用。
第二个是编译时编织
的 编译时编织 强> 是最简单的方法。当您拥有应用程序的源代码时,ajc将从源代码编译并生成编织类文件作为输出。编织器的调用是ajc编译过程不可或缺的一部分。方面本身可以是源或二进制形式。如果受影响的类需要方面进行编译,那么必须在编译时编织。方面是必需的,例如,当他们将成员添加到类中时,正在编译的其他类引用添加的成员。
你的理解是正确的。 Spring AOP是基于代理的。 Spring使用JDK代理(首选代理目标实现至少一个接口)或CGLIB代理(如果目标对象不实现任何接口)来为给定目标bean创建代理。
除非另有配置,否则Spring AOP会执行运行时编织。但是,您可以设置Spring通过AspectJ进行加载时编织。检查 文档链接 更多细节。
参考 Spring AOP代理内部