Spring的AOP是静态的或动态的

时间:2013-01-30 05:14:53

标签: spring aop

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

1 个答案:

答案 0 :(得分:2)

根据Spring documentation,它在运行时完成:

  

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

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

  

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

Spring文档对how the proxying works有很好的解释。

将此与AspectJ进行比较,编辑时会发生编织,有趣的是at various points

  

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

在AspectJ中:

  • 编译时编织通过使用ajc编译器来编译源代码。
  • 编译后编织时间通过使用ajc编译器将方面添加到现有类/ jar中而发生。
  • 加载时编织允许您configure your aspects而无需重新编译,但需要类加载器的特殊支持(加载时编织在类加载时执行编织)。它通常via Java agent instrumentation实施,并且比其他编织时间表现更差。