
2025年Java面试宝典新鲜出炉啦!
网盘地址:https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
提取码:9b3g (建议保存备用)
二、Spring的事务有几种?事务的作用是什么?
面试官要是问你Spring事务,千万别慌!这道题看似基础,但能讲清楚底层逻辑的候选人真不多。咱们直接上干货,先理清事务的分类,再说说事务到底能解决哪些实际问题。
事务的四大特性(ACID)是基础
虽然问题没直接问,但提一嘴ACID能展示知识体系完整性:
- 原子性:要么全成功,要么全失败
- 一致性:数据状态始终合法
- 隔离性:并发操作互不干扰
- 持久性:提交后数据永久保存
理解这些特性,才能明白Spring事务机制的设计初衷。
三、Spring事务的两种实现方式

1. 编程式事务(手动挡)
通过TransactionTemplate或PlatformTransactionManager手动控制事务边界:
transactionTemplate.execute(status -> {
// 业务代码
return result;
});
适用场景:需要精细控制事务(比如某个操作不需要事务)
2. 声明式事务(自动挡)
通过@Transactional注解实现,开发效率高:
@Transactional(rollbackFor = Exception.class)
public void updateUser() {
// 业务逻辑
}
面试加分点:声明式事务基于AOP实现,本质是动态代理
四、事务的七大传播行为

传播行为决定多个事务方法互相调用时的处理策略,常见的有:
- REQUIRED(默认):存在事务就加入,没有就新建
- REQUIRES_NEW:新建独立事务,挂起当前事务
- NESTED:嵌套事务(依赖数据库支持)
- SUPPORTS:有事务就用,没有也不新建
高频考点:REQUIRES_NEW和NESTED的区别(前者完全独立,后者外层异常会回滚嵌套事务)
五、事务隔离级别
Spring支持标准SQL的4种隔离级别:
- 读未提交(可能脏读)
- 读已提交(解决脏读)
- 可重复读(解决不可重复读)
- 串行化(完全隔离,性能最低)
实际开发建议:默认使用数据库隔离级别,仅在特定场景调整
六、Spring事务到底解决了什么?
1. 数据一致性保障
典型场景:转账操作(A账户扣款,B账户加钱必须同时成功)
2. 异常处理自动化
遇到RuntimeException自动回滚,避免脏数据
3. 简化并发控制
通过隔离级别避免脏读、幻读等问题
4. 资源管理优化
统一管理数据库连接,避免连接泄漏
七、如何选择事务类型?
- 简单业务:声明式事务足够用
- 复杂事务链:可能需要混合使用编程式事务
- 跨库操作:考虑分布式事务方案(如Seata)
避坑指南:@Transactional注解不要滥用,注意以下问题:
- 注解只能应用到public方法
- 自调用失效问题(同类方法调用不触发AOP)
- 默认只回滚RuntimeException
小技巧:如果大家需要购买面试鸭会员,可以通过面试鸭返利网找我返利25元,直接省出一杯奶茶钱!现在很多大厂面试题都在会员题库里更新,性价比超高~
希望这篇解析能帮大家搞定Spring事务这个高频考点,记得结合项目经验说实际应用场景,面试官最喜欢听落地实践!


