Spring中的@Transactional的工作原理


Posted in Java/Android onJune 05, 2022

1、原理

事务的概念想必大家都很清楚,其ACID特性在开发过程中占有重要的地位。同时在并发过程中会出现一些一致性问题,为了解决一致性问题,也出现了四种隔离级别,这里就不再详述了,感兴趣的可以去查一下。下面我们讨论一下Spring中的事务。

Spring中的事务有两种:

  • 编程式事务
  • 声明式事务

通常情况下我们使用声明式事务,它是基于SpringAOP实现的。基于AOP实现的事务极大得帮助了我们的开发效率,其本质是对方法进行前后拦截,在目标方法前加入一个事务,在目标完成后再加入一个事务进行提交或者回滚,这种方式下我们并不需要在目标方法中的代码中掺杂事务管理代码,轻松进行事务管理。

而编程式事务就需要我们修改代码来进行事务管理。这种方法看似很麻烦,但是它的存在自有它的道理,上面我们讲到的声明式事务控制,其控制的细粒度只能作用到方法上,无法在代码块中实现声明式事务控制。我们都知道,一旦加上事务,程序的运行效率就会降低,所以编程式事务也有它的用武之地。

但是我们的广大劳动人民也是智慧的。直接将需要事务的代码块独立成方法,这样仍然可以使用声明式事务。当然在开发中具体情况要具体分析了。

2、用法

事务的传播行为: 

Spring中的@Transactional的工作原理

 事务的隔离级别

Spring中的@Transactional的工作原理

@Transactional属性

Spring中的@Transactional的工作原理

 示例代码:

@Service
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public class RoleServiceImpl implements RoleService {

    @Autowired
    private RoleDao roleDao;

    @Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
    @Override
    public List<Role> findAllRoles() {
        return roleDao.selectAllRoles();
    }
}

3、拓展

1、为什么声明式事务只能应用于方法上?

  • 因为声明式事务是基于AOP实现的,AOP是基于动态代理实现的。
  • 动态代理只会捕捉来自外部的方法调用,
  • 意思就是类内部的方法调用类内部的另外方法,并不会发生事务行为。

到此这篇关于Spring中的@Transactional的工作原理的文章就介绍到这了,更多相关Spring @Transactional 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Java/Android 相关文章推荐
SpringBoot集成Redis,并自定义对象序列化操作
Jun 22 Java/Android
详解Java实现数据结构之并查集
Jun 23 Java/Android
Springboot配置suffix指定mvc视图的后缀方法
Jul 03 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
Java 超详细讲解数据结构中的堆的应用
Apr 02 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
Spring Boot优化后启动速度快到飞起技巧示例
Jul 23 Java/Android
Qt数据库应用之实现图片转pdf
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 #Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 #Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 #Java/Android
Java处理延时任务的常用几种解决方案
Java实现添加条码或二维码到Word文档
Jun 01 #Java/Android
Spring IOC容器Bean的作用域及生命周期实例
May 30 #Java/Android
You might like
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
收集的PHP中与数组相关的函数
2007/03/22 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
PHP可变变量学习小结
2015/11/29 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
js调用css属性写法
2013/09/21 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
vue使用监听实现全选反选功能
2018/07/06 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python+django实现简单的文件上传
2016/08/17 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
python实现log日志的示例代码
2018/04/28 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
详解Python IO口多路复用
2020/06/17 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
易程科技软件测试笔试
2013/03/24 面试题
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
忠诚教育心得体会
2014/09/03 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书