千家信息网

Spring事务的原理是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章给大家分享的是有关Spring事务的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.Spring事务的原理Sprin
千家信息网最后更新 2026年11月03日Spring事务的原理是什么

本篇文章给大家分享的是有关Spring事务的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1.Spring事务的原理

Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件中做相关的事务规则声明,另一种是基于@Transactional 注解的方式。

使用@Transactional的相比传统的我们需要手动开启事务,然后提交事务来说。它提供如下方便

根据你的配置,设置是否自动开启事务

自动提交事务或者遇到异常自动回滚

声明式事务(@Transactional)基本原理如下:

配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional标识。

spring 在启动的时候会去解析生成相关的bean,这时候会查看拥有相关注解的类和方法,并且为这些类和方法生成代理,并根据@Transaction的相关参数进行相关配置注入,这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务)。

真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。

2.@Transactional使用注意点

@Transactional注解只能在抛出RuntimeException或者Error时才会触发事务的回滚,常见的非RuntimeException是不会触发事务的回滚的。但是我们平时做业务处理时,需要捕获异常,所以可以手动抛出RuntimeException异常或者添加rollbackFor = Exception.class(也可以指定相应异常)

/*

* 捕获异常时,要想使事务生效,需要手动抛出RuntimeException异常或者添加rollbackFor = Exception.class

*/

@Override

@Transactional

public Long addBook(Book book) {

Long result = null;

try {

result = bookDao.addBook(book);

int i = 1/0;

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException();

}

return result;

}

@Override

@Transactional(rollbackFor = Exception.class)

public Long addBook(Book book) {

Long result = null;

try {

result = bookDao.addBook(book);

int i = 1/0;

} catch (Exception e) {

e.printStackTrace();

throw e;

}

return result;

}

只有public修饰的方法才会生效

方法内自调用导致的事务不生效

如下几种情况:

/*

* 情况一:都有事务注解,异常在子方法出现,事务生效

*/

@Override

@Transactional

public Long addBook(Book book) {

Long result = add(book);

return result;

}

@Transactional

public Long add(Book book){

Long result = bookDao.addBook(book);

int i = 1/0;

return result;

}

/*

* 情况二:都有事务注解,异常在主方法出现,事务生效

*/

@Override

@Transactional

public Long addBook(Book book) {

Long result = add(book);

int i = 1/0;

return result;

}

@Transactional

public Long add(Book book){

Long result = bookDao.addBook(book);

return result;

}

/*

* 情况三:只有主方法有事务注解,异常在子方法出现,事务生效

*/

@Override

@Transactional

public Long addBook(Book book) {

Long result = add(book);

return result;

}

public Long add(Book book){

Long result = bookDao.addBook(book);

int i = 1/0;

return result;

}

/*

* 情况四:只有主方法有事务注解,异常在主方法出现,事务生效

*/

@Override

@Transactional

public Long addBook(Book book) {

Long result = add(book);

int i = 1/0;

return result;

}

public Long add(Book book){

Long result = bookDao.addBook(book);

return result;

}

/*

* 情况五:只有子方法有事务注解,异常在子方法出现,事务不生效

*/

@Override

public Long addBook(Book book) {

Long result = add(book);

return result;

}

@Transactional

public Long add(Book book){

Long result = bookDao.addBook(book);

int i = 1/0;

return result;

}

以上就是Spring事务的原理是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

事务 方法 注解 情况 原理 只有 方式 配置 业务 手动 处理 事务管理 文件 更多 知识 篇文章 编码 逻辑 代理 生成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技开发公司 互联网 科技公司 南京欣网互联网科技 大白互联网科技 甘肃拓世互联网科技有限公司 太原新华互联网科技学校怎么样 银川新华互联网科技学校地址 字节跳动和互联网科技 中化能源互联网科技招聘 岳阳华臻互联网科技有限公司 花神(南京)互联网科技有限公司 互联网科技与大数据专业 中国互联网十大科技股排名 国大互联网教育科技有限公司工作 西安小鹰速贷互联网科技有限公司 华夏恒生科技与互联网科技 深圳市罗太互联网科技有限公司 沐思想互联网科技有限公司 陕西彩京云互联网科技有限公司 华人运通互联网科技公司 深圳九邦互联网科技有限公司 河南真二互联网科技有限公司 金融科技创新监管互联网金融 远信互联网科技 丰台科技园 互联网 蓝色互联网科技 字节跳动和互联网科技 厦门千工互联网科技有限公司 风投北京互联网科技 珠海东科互联网科技有限公司
0