<span style="color: blue;">2025年Java面试宝典:
链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g 提取码: 9b3g</span>
(建议保存到个人网盘,涵盖Spring高频面试考点)

Spring事务传播行为实现原理
事务传播行为的基础认知
事务传播行为是Spring框架面试中的必考题。简单来说,它定义了多个事务方法嵌套调用时,事务如何传递或相互影响。比如当方法A调用方法B时,B是否需要沿用A的事务、挂起A的事务、或者直接报错。
Spring提供了7种传播行为:
- PROPAGATION_REQUIRED(默认)
- PROPAGATION_REQUIRES_NEW
- PROPAGATION_NESTED
- 其他如SUPPORTS、NOT_SUPPORTED等

实现原理的核心组件
-
事务管理器(PlatformTransactionManager)
Spring事务传播行为通过事务管理器实现。所有传播逻辑最终都会委托给具体的实现类(如DataSourceTransactionManager)。它负责开启、提交或回滚事务。 -
事务同步器(TransactionSynchronizationManager)
使用ThreadLocal存储当前线程的事务上下文。当调用链中存在多个事务方法时,同步器通过线程局部变量判断是否需要挂起旧事务、创建新事务或复用现有事务。 -
传播机制的具体实现
- REQUIRED:检查当前是否有事务,有则加入,没有则新建
- REQUIRES_NEW:挂起当前事务(如果有),强制创建新事务
- NESTED:在现有事务中创建保存点,部分回滚不影响外部事务
底层如何控制事务嵌套?
面试中常被问到的挂起事务和恢复事务如何实现?
答案是:通过TransactionStatus保存事务状态。以REQUIRES_NEW为例:
- 方法A开启事务时,事务状态被记录
- 调用方法B时,事务管理器挂起方法A的事务状态
- 方法B结束后,根据保存的事务状态恢复方法A的事务

高频面试题避坑指南
面试官可能会问:"NESTED和REQUIRES_NEW的区别是什么?"
正确回答方向:
- NESTED依赖于外部事务,使用保存点机制,外部事务异常会导致嵌套事务整体回滚
- REQUIRES_NEW是完全独立的新事务,不会被外部事务影响
技巧提示:回答时一定要结合具体使用场景。例如:"电商系统中扣减库存和生成订单需要强一致性时适合用REQUIRED,而记录操作日志适合用REQUIRES_NEW"。
如何准备Spring事务传播行为面试?
- 理解每种传播行为的语义差异而非死记配置参数
- 掌握事务失效的常见场景(比如方法非public、异常类型不匹配)
- 通过源码分析核心类(推荐阅读AbstractPlatformTransactionManager)
需要购买面试鸭会员的同学,可以通过面试鸭返利网联系我,可额外返现25元。已有300+学员通过返利优惠成功解锁全站面试真题解析!


