Spring AOP和AspectJ的关系

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实现,只是解决了企业业务开发中的常见问题。
特点:
Spring中可以方便的将SpringAOP、IOC容器和AspectJ整合在一起。
Spring提供对AspejctJ注解和表达式的部分支持,以满足企业开发需求.
SpringAOP只支持方法运行的连接点。

Spring AOP启用对AspectJ的支持

  1. 添加aspectjweaver.jar
  2. 通过@EnableAspectJAutoProxy注解或者aop:aspectj-autoproxy/开启支持
  3. 切面类上需要添加@Aspect和@Component注解才会被自动扫描到,只添加@Aspect不会被扫描到。
posted @ 2023-01-31 15:17  小张同学哈  阅读(207)  评论(0)    收藏  举报