Spring 弹簧&x27;s AOP是静态的还是动态的

Spring 弹簧&x27;s AOP是静态的还是动态的,spring,aop,Spring,Aop,众所周知,AOP是在Spring中由CGLIB/JDK代理提供的。交织是在运行时发生的,还是字节码在编译时被修改以包含通知?根据,它是在运行时完成的: SpringAOP默认使用标准J2SE动态代理作为AOP代理 由于Java的动态代理仅适用于接口: SpringAOP也可以使用CGLIB代理。这对于代理类而不是接口是必需的 Spring文档很好地解释了这一点 将此与AspectJ进行比较,AspectJ在编译时进行编织,这非常有趣: 编织过程本身可以在三个不同的时间发生:编译时、编译后和加载时

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

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

SpringAOP默认使用标准J2SE动态代理作为AOP代理

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

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

Spring文档很好地解释了这一点

将此与AspectJ进行比较,AspectJ在编译时进行编织,这非常有趣:

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

在AspectJ中:

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

您能详细说明这些区别吗?编译时间、编译后时间和加载时间?