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

通知顺序

  • 当有多个切面的切入点都匹配到了目标方法,目标方法运行时,多个通知方法都会被执行

执行顺序

  1. 不同切面类中,默认按照切面类的类名字母排序:
    • 目标方法前的通知方法:字母排名靠前的先执行
    • 目标方法后的通知方法:字母排名靠后的后执行
  2. 用@Order(数字)加在切面类上来控制顺序
    • 目标方法前的通知方法:数字小的先执行
    • 目标方法后的通知方法:数字小的后执行

切入点表达式

切入点表达式

  • 切入点表达式:描述切入点方法的一种表达式
  • 作用:主要用来决定项目中的那些方法,(命中的类会创建代理对象)需要加入通知
  • 常见形式:
    1.execution(...):根据方法的签名来匹配
    2.@annotation(...):根据注解匹配
posted @ 2023-05-21 17:21  独徘徊  阅读(96)  评论(0)    收藏  举报