博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring事务管理的底层逻辑—源码解析
阅读量:6500 次
发布时间:2019-06-24

本文共 1051 字,大约阅读时间需要 3 分钟。

本文代码为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.class
invokeWithinTransaction方法,
invocation.proceedWithInvocationspring事务是环绕通知
进入
createTransactionIfNecessary方法,如图
出现异常时进入
completeTransactionAfterThrowing方法,可以看到
rollback()
没有异常则继续往下commit

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

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

有哪些不同类型的事务

来到TransactionAspectSupport.classcreateTransactionIfNecessary方法

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

简单时序图

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

转载地址:http://mutyo.baihongyu.com/

你可能感兴趣的文章
POJ-1753 Flip Game 枚举 状态压缩
查看>>
〖Linux〗使用Qt5.2.0开发Android的NDK应用程序
查看>>
idea快捷键
查看>>
Finalize/Dispose/Destructor
查看>>
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
仿余额宝数字跳动效果 TextCounter
查看>>
(10)Spring Boot修改端口号【从零开始学Spring Boot】
查看>>
Ubuntu16.04安装qt
查看>>
顶部滑动下拉广告
查看>>
简化代码的微小修改
查看>>
python之CSV文件格式
查看>>
你必须知道的.net学习总结
查看>>
leetcode之Reorder List
查看>>
Axure8.0 网页 or App 鼠标滚动效果
查看>>
DEDECMS教程:上/下一篇文章标题长度的截取方法
查看>>
文件操作示例脚本 tcl
查看>>
大家好,新年快乐。
查看>>
prototype
查看>>
【SQL Server】系统学习之一:表表达式
查看>>
Docker容器入门-基本命令的使用
查看>>