0

众所周知,AOP 是由 Spring 中的 CGLIB/JDK Proxy 提供的。编织是在运行时发生的,还是在编译时修改字节码以包含建议?

4

1 回答 1

2

根据Spring 文档,它是在运行时完成的:

Spring AOP 默认为 AOP 代理使用标准 J2SE 动态代理。

由于 Java 的动态代理仅适用于接口:

Spring AOP 也可以使用 CGLIB 代理。这是代理类而不是接口所必需的。

Spring 文档很好地解释了代理是如何工作的

将此与 AspectJ 进行比较,其中编织发生在编译时,有趣的是,这可能发生在不同的点

编织过程本身可以发生在三个不同时间之一:编译时、编译后时间和加载时。

在方面J:

  • 编译时编织通过使用 ajc 编译器来编译您的源代码。
  • 通过使用 ajc 编译器将方面添加到现有的类/jar 中来进行编译后时间编织。
  • 加载时编织允许您在不重新编译的情况下配置方面,但需要类加载器的特殊支持(加载时编织在类加载时执行编织)。它通常通过 Java 代理工具实现,并且性能比其他编织时间差。
于 2013-01-30T05:20:49.877 回答