SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,对项目开发提供了极大地便利。
AOP的实现有AspectJ、JDK动态代理、CGLIB动态代理,SpringAOP不是一种新的AOP实现,其底层采用的是JDK/CGLIB动态代理。
Aspectj是一种静态代理,而SpringAOP是动态代理。但Aspectj的一套定义AOP的API非常好,直观易用。所以Spring引入了Aspectj
实现方式:1.直接配置Advisor(实现接口)
实现Advisor接口,定义拦截器和拦截规则(切点)。需要定义三个类,一个Advisor的实现类,一个Advice实现类(拦截器),一个aop适配过滤器(这里使用的Advisor为派生的PointcutAdvisor ,需要定义PointCut切点)
2.间接配置Advisor(常用的注解方式)
使用Aspectj jar包提供的注解定义AOP配置,由Spring解析配置生成Advisor。
- 前置通知:在我们执行目标方法之前运行(@Before)
- 后置通知:在我们目标方法运行结束之后 ,不管有没有异常(@After)
- 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning)
- 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing)
-
环绕通知:动态代理, 需要手动执行procced()方法(其实就是执行我们的目标方法执行之前相当于前置通知,执行之后就相当于我们后置通知(@Around
- SpringAOP不是一种新的AOP实现,使用JDK动态代理和CGLIB动态代理实现
- SpringAOP配置方式核心是Advisor,可以自定义Advisor,也可以通过AspectJ间接定义Advisor
- SpringAOP的实现遵循了AOP联盟规范,AOP联盟顶级API接口贯穿了整个AOP过程
参考:SpringAOP学习--SpringAOP简介及原理_程序源程序的博客-CSDN博客_springaop



