spring

spring #

Spring AOP 和 AspectJ 的关系? #

AOP #

AOP的标准规范由AOP联盟制定,Spring AOP和AspectJ都是AOP的实现者。AOP的增强织入可以在三个阶段进行:编译期、类加载期和运行期。

编译期织入:使用特殊的编译器,在将Java源文件编译成class文件时进行增强逻辑的织入。 类加载期织入:使用特殊的类加载期,在JVM加载class文件时进行织入。 运行时织入:在程序运行过程中,使用JDK动态代理或者CGLIB创建代理类来实现增强逻辑的织入。

AspectJ #

AspectJ是在Java语言层面实现了AOP,它对java语言进行了扩展,定义了AOP语法,能够在编译期进行横切代码的织入。它有专门的编译器,能够生成符合Java字节码规范的class文件。AspectJ也可以在类加载期进行织入。

Spring AOP #

Spring AOP使用纯Java实现,不需要特殊的编译器和类加载器,它在运行期通过代理方式向目标类织入增强代码。Spring AOP为了遵循规范,或者和AspectJ保持兼容,借助了AspectJ的注解风格和AOP联盟定义的部分底层接口,没有提供完整的AOP实现(仅支持方法执行连接点),在原理上Spring AOP和AspectJ没有关系。

2024年7月8日