本文代码为spring 5.1.2

spring是如何控制事务的提交和回滚

加上@Transactional注解之后,Spring可以启到事务控制的功能了,再正式执行方法前它会做一些操作,我们来看看

首先进入CglibAopProxy.classintercept方法或者JdkDynamicAopProxy.classinvoke方法(继承接口方式),根据不同实现方法选择不同的动态代理类

CglibAopProxy.class

JdkDynamicAopProxy.class 此处动态代理具体是指目标对象的目标方法,可以debug Evaluate看出进去之后我们来到ReflectiveMethodInvocation.class然后一步一步往下走来到invoke方法 进入invoke方法来到 TransactionInterceptor.class 继续往下,进入invokeWithinTransaction方法,来到 TransactionAspectSupport.classinvokeWithinTransaction方法, invocation.proceedWithInvocationspring事务是环绕通知 进入createTransactionIfNecessary方法,如图 出现异常时进入completeTransactionAfterThrowing方法,可以看到rollback() 没有异常则继续往下commit

@Transactional 事务注解是如何产生作用的?

如上所说,事务最开始是先进入CglibAopProxy.classintercept方法或者JdkDynamicAopProxy.classinvoke方法,可以看出这2个类都是AOP增强类,所以@Transactional 事务注解才可以产生作用。

有哪些不同类型的事务

来到TransactionAspectSupport.classcreateTransactionIfNecessary方法

进入tm.getTransaction(txAttr); 来到AbstractPlatformTransactionManager.class @Transactional注解代码如图所示 来看看如果存在事务,进入handleExistingTransaction方法,如图

简单时序图

  • 挂起:在新方法里面,不使用外部的事务环境
  • 嵌套事务:
  • 保存点:

Spring事务管理的底层逻辑—源码解析相关推荐

  1. spring MVC cors跨域实现源码解析

    spring MVC cors跨域实现源码解析 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议.IP.http方法任意一个不同就是跨域. sp ...

  2. spring管理事务管理1----------编程式(以下源码均为spring2.5.6)

    2019独角兽企业重金招聘Python工程师标准>>> Spring事务策略,有一个接口"PlatformTransactionManager". /* * Co ...

  3. 集合深度学习07—Set、HashSet、LinkedHashSet、TreeSet、 底层原理 源码解析

    一.Set接口 特点: 唯一 无序(相对List接口部分来说的,无序不等于随机) 没有索引相关的方法 遍历方式: 迭代器 增强 for 循环(底层还是 Itr 迭代器) 二.HashSet 1. Ha ...

  4. Spring Security Core 5.1.2 源码解析 -- PasswordEncoderFactories

    概述 PasswordEncoderFactories是Spring Security创建DelegatingPasswordEncoder对象的工厂类.该工厂所创建的DelegatingPasswo ...

  5. Spring 事务提交回滚源码解析

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在上篇文章 Spring 事务初始化源码分析 中分析了 Spring 事务初始化的一个过程,当初始化完成后,Spring ...

  6. Spring事务管理理解

    文章目录 一.事务认识 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 二.事务的传播特性 三.事务的隔离级别 四.spr ...

  7. Spring事务管理的总结

    1.事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销.Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Spring ...

  8. Spring事务管理之几种方式实现事务

    1.事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销.Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Spring ...

  9. Spring 定时任务源码解析

    日常的开发中我们经常需要开发一些定时任务,比较常见的是 Spring 自带的定时任务,使用简单方便,不需要另外引进一些其他 Jar 包. 今天我们来简单的了解一下,看看 Spring 的定时任务是怎么 ...

最新文章

  1. linux 编译mysql_linux下编译MYSQL
  2. scikit-learn K近邻法类库使用小结
  3. Ventoy 制作可启动 U 盘的开源工具
  4. 在DataGrid中合并单元格行
  5. ListView常用属性、方法
  6. java中处理打折率_【JAVA300例】13、输入价格判断折扣,switch用法+int留整数方便判断...
  7. [译]看漫画学Flux
  8. 云计算的发展趋势_云计算的未来发展趋势
  9. Windows上配置iPhone开发环境
  10. worldcloud库的使用
  11. oracle恢复表的数据到某个时间点
  12. quartus仿真24:数据选择器MUX四选一74153八选一74151
  13. i78700和i510400f性能差距大不大
  14. yocto的hello world
  15. linux hping3命令,hping3命令 – 测试网络及主机的安全
  16. google账号市场登陆
  17. Golang连接池应用实践
  18. 手机社会化分享到qq好友、qq空间、微信、微信朋友圈、微博等(区分浏览器)
  19. hexo页脚添加访客人数和总访问量
  20. macOS系统允许任何来源APP的安装打开

热门文章

  1. HDU 5047 Sawtooth 高精度
  2. WebService客户端添加SOAPHeader信息
  3. Redis消息通知系统的实现
  4. Caffe源码中Pooling Layer文件分析
  5. Java解决递归栈溢出_方法递归调用中java栈溢出的问题 及 解答 | 学步园
  6. 测试方案_何小伟:ABTest测试方案
  7. alternate端口什么意思_宽带光信号闪红灯是什么意思?
  8. Java项目:酒店管理系统(java+SSM+jsp+mysql+maven)
  9. atlas单机模式代码_用代码玩太无聊,这样玩海盗游戏《ATLAS》单机模式才是正确玩法...
  10. 【sql】实现分页查询