AOP: Aspect Oriented Programming 面向切面编程 (实现方式:动态代理)
作用: 在程序运行期间,不修改源代码的情况下对已有的方法进行增强
优势:
减少重复代码
提高开发效率
维护方便
配置方式实现:
xml
注解
AOP核心概念:
1.连接点 (JoinPoint)
代表那些被拦截到的点 (在Spring中这个点指的是方法)
2.切入点 (Pointcut)
对连接点进行拦截的定义
3.通知或增强 (Advice):拦截后要做的事情
前置通知:在某连接点之前执行的增强,但这个增强不能阻止连接点前的执行(除非它抛出一个异常)
后置通知:在某连接点正常完成后执行的增强:例如,一个方法没有抛出任何异常,正常返回
异常通知:在方法抛出异常退出时执行的增强
最终通知:当某连接点退出的时候执行的增强(不论是正常返回还是异常退出)
环绕通知:环绕通知类似于动态代理的全过程,并且环绕通知必须有返回值,返回值就是目标方法的返回值。。
4.目标(target)
被代理对象
5.织入(Weaving)
将切面应用到目标对象并导致代理对象创建的过程
6.代理类(Proxy)
由spring生成
7.切面(Aspect)
切入点和通知的集合
AOP概念图:
1.UserService 是被代理对象
2.UserService中的3个方法就是 连接点
3.UserService中的两个 连接点,会被拦截,称之为切入点
4. A是一个切面事务类,类中存储了通知(增强) advice的方法
5. 将切面应用到目标对象并导致代理对象创建的过程 ,整个过程就是织入
6.生成的动态代理
7.对切入点进行增强,这个就是切面
图片来源:转自https://blog.csdn.net/Cjiaocsda1127/article/details/85723782