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异常处理自动配置的原理
Jun 21 Java/Android
Java中使用Filter过滤器的方法
Jun 28 Java/Android
Log4j.properties配置及其使用
Aug 02 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
Sep 25 Java/Android
解析mybatis-plus中的resultMap简单使用
Nov 23 Java/Android
springboot中的pom文件 project报错问题
Jan 18 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
Android Gradle 插件自定义Plugin实现注意事项
Jun 16 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 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
PHP与SQL注入攻击[二]
2007/04/17 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
js跳转页面方法实现汇总
2014/02/11 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python版微信红包分配算法
2015/05/04 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
python获取代理IP的实例分享
2018/05/07 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
Python Django view 两种return的实现方式
2020/03/16 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
应届毕业生求职信范文
2013/12/18 职场文书
写给女生的道歉信
2014/01/14 职场文书
中秋节超市促销方案
2014/01/30 职场文书
关于运动会的稿件
2014/02/02 职场文书
成绩单家长评语大全
2014/04/16 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
JavaScript实现简单的音乐播放器
2022/08/14 Javascript