春天的AOP是静态的还是动态的



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

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

Spring AOP

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

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

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

Spring 文档很好地解释了代理的工作原理。

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

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

在方面J:

  • 编译时编织通过使用 ajc 编译器编译源代码来实现。
  • 编译后编织通过使用 ajc 编译器向现有类/jar 添加方面来实现。
  • 装入时编织
  • 允许您在不重新编译的情况下配置您的方面,但需要类加载器的特殊支持(装入时编织在类装入时执行编织)。它通常通过 Java 代理工具实现,并且性能比其他编织时间差。

最新更新