spring 事务部分源码解析

spring 事务实现原理,本文代码是根据注解式声明式事务所写

源码时序图

《spring 事务部分源码解析》

源码讲解:

1、获取当前服务的代理对象,这里是使用cglib实现的代理

2、获取本方法上的拦截器,本次只有我们配置的Transactioin拦截器

6、根据@Transaction注解上的属性,创建TransactionDefinition对象,本对象就是事务定义对象

8、部分ORM框架都会继承spring的AbstractPlatFormTransactionManager抽象类或实现PlatformTransactionManager接口

,并根据自己情况具体实现里边方法,主要三个方法

TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;

9、判断本次操作是否已经在事务中,主要用来根据不通的事务传播来响应不通结果,可根据图进行理解

10、我们这里会调用getTransaction()方法获取TransactionStatus对象该对象是事务各种状态的表示,可以根据里边状态判断事务是否已完成、回滚

11、根据8中不同实现获取数据库连接,设置隔离级别

12、13、返回TranscationStatus得到TranscationInfo

14-15、执行业务方法操作数据无报错提交,异常后回滚如下图

《spring 事务部分源码解析》

最后放一个直观图

《spring 事务部分源码解析》

图片来源:https://www.cnblogs.com/yixianyixian/p/8372832.html

为方便查看附上一个事务传播行为

 

《spring 事务部分源码解析》

图片来源:https://blog.csdn.net/pml18710973036/article/details/58607148

    原文作者:Spring Cloud
    原文地址: https://blog.csdn.net/qq_26418435/article/details/83546350
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞