springbootWeb后端开发--事务管理&AOP
事务管理
事务回顾
-
概念:是一组操作的集合,它是一个不可分割的工作单位,这些操作,要么同时成功,要么同时失败
-
操作:
- 开启事务(一组操作开始前,开启事务):start transaction / begin;
- 提交事务(这组操作全部成功后,提交事务):commit;
- 回滚事务中间任何一个操作出现异常,回滚事务):rollback;
spring事务管理
注解
- 注解:@Transactional
- 位置:业务(service)层的方法上、类上、接口上
- 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕后,提交事务;出现异常,回滚事务
开启事务管理
开启事务管理
# 开启事务管理日志
logging:
level:
org.springframework.jdbc.support.JdbcTransactionManager: debug
事务进阶
rollbackFor
事务属性-回滚 :rollbackFor
- 默认情况下,只出现RuntimeException才回滚异常,rollbackFor属性用于控制出现任何异常类型,回滚事务
propagation
事务属性-传播行为:propagation
- 事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制
![image]()
场景:
- REQUIRED:大部分情况下都是用该传播行为即可
- REQUIRES_NEW:当我们不希望事务之间相互影响时,可以使用该传播行为。
AOP基础
AOP概念
- AOP:面向切面编程、面向方面编程,其实就是面向特定方法编程
- 实现:
- 动态代理是面型切面编程最主流的实现,而springAOP是spring框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程
AOP快速入门
- 优势:
- 代码入侵入
- 减少重复代码
- 提高开发效率
- 维护方便
AOP核心概念
- 连接点:JionPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
- 通知:Advice,值那些重复的逻辑,也就是共性功能,(最终体现为一个方法)
- 切入点:PointCut,匹配连接但的条件,通知仅会在切入点方法执行是被应用
- 切面:Aspect,描述通知与切入点的对应关系(通知+切入点)
- 目标对象:Target,通知所应用的对象
![image]()
![image]()
AOP进阶
通知类型
- @Around(重点):环绕通知,此注解标注的通知方法在目标方法前、后都被执行(功能最强大、调用目标方法、设置参数、获取返回值)
- @Before:前置通知,此注解标注的通知方法在目标方法前被执行
- @After:后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行
- @AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行
- @AfterThrowing:异常后通知,此注解标注的通知方法发生异常后执行
注意事项:
- @Around:环绕通知需要自己调用ProceedingJoinPoint.proceed()来让原始方法执行,其他通知不需要考虑目标方法执行
- Around:环绕通知方法的返回值,必须指定为Object,来接收原始方法的返回值
@PointCut
- 该注解的作用是将公共的切点表达式抽取出来,需要用到时引用该切点表达式即可
![image]()
通知顺序
- 当有多个切面的切入点都匹配到了目标方法,目标方法运行时,多个通知方法都会被执行
执行顺序
- 不同切面类中,默认按照切面类的类名字母排序:
- 目标方法前的通知方法:字母排名靠前的先执行
- 目标方法后的通知方法:字母排名靠后的后执行
- 用@Order(数字)加在切面类上来控制顺序
- 目标方法前的通知方法:数字小的先执行
- 目标方法后的通知方法:数字小的后执行
切入点表达式
切入点表达式
- 切入点表达式:描述切入点方法的一种表达式
- 作用:主要用来决定项目中的那些方法,(命中的类会创建代理对象)需要加入通知
- 常见形式:
1.execution(...):根据方法的签名来匹配
2.@annotation(...):根据注解匹配





浙公网安备 33010602011771号