spring 事务部分源码解析

 2019-11-23 11:07  阅读(1128)
文章分类:Spring Cloud

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

源码时序图

20191123100209\_1.png

源码讲解:

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、执行业务方法操作数据无报错提交,异常后回滚如下图

20191123100209\_2.png

最后放一个直观图

20191123100209\_3.png

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

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

20191123100209\_4.png

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


来源:http://ddrv.cn/a/88268

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> spring 事务部分源码解析

相关推荐