03 — 事务管理
定位: Spring 声明式事务与编程式事务的底层原理和源码实现 面试高频度: ⭐⭐⭐⭐⭐
一、板块在体系中的位置
┌──────────────────────────────────────────────┐
│ 事务管理在 Spring 中的位置 │
│ │
│ 01. IoC 容器 (基础设施) │
│ ↓ │
│ 02. AOP (提供事务拦截机制) │
│ ↓ │
│ 03. 事务管理 (本板块) ← 基于 AOP + IoC │
│ ↓ ↓ │
│ 04. Spring MVC 06. 数据访问 │
│ (请求事务) (JPA事务) │
│ ↓ ↓ │
│ 05. Spring Boot 08. Spring Cloud │
│ (自动配置事务) (分布式事务 Seata) │
└──────────────────────────────────────────────┘事务管理是 Spring AOP 最经典的应用,整合了 PlatformTransactionManager 抽象、AOP 拦截、ThreadLocal 线程绑定三大技术。
二、知识全景图
┌─────────────────────────────────────────────┐
│ 事务管理核心知识体系 │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ 1. 核心架构 (三大顶级接口) │ │
│ │ PlatformTransactionManager │ │
│ │ TransactionDefinition │ │
│ │ TransactionStatus │ │
│ └──────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────┐ │
│ │ 2. 声明式事务 AOP 实现 │ │
│ │ TransactionInterceptor → 源码分析 │ │
│ │ DataSourceTransactionManager │ │
│ └──────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────┐ │
│ │ 3. 传播行为与隔离级别 │ │
│ │ 7种传播行为 · 5种隔离级别 │ │
│ │ 挂起与恢复机制 │ │
│ └──────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────┐ │
│ │ 4. 高级特性 │ │
│ │ 回滚规则 · 只读优化 · 同步器机制 │ │
│ │ NESTED 保存点 · 声明式 vs 编程式 │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────┘三、子专题导航
| # | 主题 | 面试频率 | 核心内容 |
|---|---|---|---|
| **03.1-事务核心架构** | ⭐⭐⭐⭐ | PlatformTransactionManager 三大接口、三种核心实现、DataSource vs JPA vs Hibernate | |
| **03.2-声明式事务源码分析** | ⭐⭐⭐⭐⭐ | TransactionInterceptor → invokeWithinTransaction → doBegin/commit/rollback 完整源码 | |
| **03.3-传播行为与隔离级别** | ⭐⭐⭐⭐⭐ | 7种传播行为源码对比、5种隔离级别、挂起恢复时序、各传播行为是否新建连接 | |
| **03.4-事务高级特性** | ⭐⭐⭐⭐ | 回滚规则(rollbackOn深度匹配)、只读(readOnly)双层面优化、TransactionSynchronizationManager、声明式 vs 编程式事务对比 |
四、核心考点速记
考点 1:事务传播行为执行流程
REQUIRED(默认):有则加入,无则创建 → 同一 Connection
REQUIRES_NEW: 挂起当前 → 新建 Connection → 执行 → 恢复
NESTED: 创建 JDBC Savepoint → 可部分回滚
NOT_SUPPORTED: 挂起当前 → 非事务执行考点 2:REQUIRES_NEW 真的新建物理连接吗?
是。suspend() 解绑当前线程的 ConnectionHolder → doBegin() 从连接池获取新连接 → 绑定到线程。如果连接池只有 1 个连接,会阻塞等待。
考点 3:Spring 事务回滚默认行为
只回滚 RuntimeException 和 Error。checked exception 默认不回滚。通过 rollbackFor = Exception.class 可覆盖。
📚 相关板块
- **IoC 容器** — 事务管理器作为 Bean 注入容器
- **AOP 板块** — @Transactional 通过 AOP 拦截实现
- **数据访问** — JPA/Hibernate 与事务管理器的配合
📚 相关链接
- **Spring文库设计文档** — 文库设计总纲