spring 事务部分源码解析

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取 2000+ 道 Java 面试题

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) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » spring 事务部分源码解析

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏