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 相关文章推荐
解析Java中的static关键字
Jun 14 Java/Android
elasticSearch-api的具体操作步骤讲解
Jun 28 Java/Android
SpringBoot整合JWT的入门指南
Jun 29 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
java如何实现获取客户端ip地址的示例代码
Apr 07 Java/Android
SpringCloud Function SpEL注入漏洞分析及环境搭建
Apr 08 Java/Android
Java 定时任务技术趋势简介
May 04 Java/Android
Android开发手册TextInputLayout样式使用示例
Jun 10 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
Java 中的 Lambda List 转 Map 的多种方法详解
Jul 07 Java/Android
Springboot集成kafka高级应用实战分享
Aug 14 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
推荐一篇入门级的Class文章
2007/03/19 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
Python中的zipfile模块使用详解
2015/06/25 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
Python底层封装实现方法详解
2020/01/22 Python
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
毕业生求职简历中的自我评价
2013/10/18 职场文书
大专毕业生自我评价分享
2013/11/10 职场文书
公务员总结性个人自我评价
2013/12/05 职场文书
商场促销活动总结
2014/07/10 职场文书
2015年公司新年寄语
2014/12/08 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
党支部综合考察意见
2015/06/01 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
《正比例》教学反思
2016/02/23 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers