"飞翔科技的支付系统出现了脏读:用户A转账还没完成,用户B就查到了中间余额。大翔要求白歌给出方案。白歌说:'用Spring声明式事务,一行注解解决。'这一章,你将掌握企业级数据访问中最关键的能力——事务控制。"
数据访问与事务管理
本章定位
本章解决的核心问题:在Spring管理的数据访问层中,如何通过声明式事务确保数据库操作的ACID特性,并精细控制事务的传播、隔离、回滚和超时策略。
学习路线图
学习顺序说明:先建立Spring数据访问的整体认知 → 掌握@Transactional核心注解 → 深入四大高级属性:传播行为(方法间事务如何协作)、隔离级别(并发问题防护)、回滚规则(什么异常触发回滚)、超时与只读(性能优化) → 学习事务事件监听 → 最后开启事务管理的总开关。
文件关系说明
| 文件 | 一句话角色 |
|---|---|
数据访问概述.md | 本章背景板,介绍Spring数据访问的统一抽象和模板模式。 |
Transactional.md | 声明式事务的核心注解,一行代码为方法加上事务边界。 |
Transactional_传播行为.md | 事务高级属性之一,解决"方法A调用方法B时,事务如何协作"的问题。 |
Transactional_隔离级别.md | 事务高级属性之二,解决脏读、不可重复读、幻读等并发问题。 |
Transactional_回滚规则.md | 事务高级属性之三,精确控制哪些异常触发回滚、哪些不触发。 |
Transactional_超时与只读.md | 事务高级属性之四,优化长事务和只读查询的性能表现。 |
TransactionalEventListener.md | 事务事件监听,在事务提交或回滚后触发后续业务逻辑(如发送通知)。 |
EnableTransactionManagement.md | 开启Spring注解驱动事务管理的总开关,与AOP的@EnableAspectJAutoProxy地位对等。 |
知识图谱
核心逻辑:@Transactional是表象,AOP代理是底层机制(上一章知识的直接应用);传播行为决定事务边界在方法调用链中如何流动;隔离级别是数据库并发控制的Spring抽象;@EnableTransactionManagement开启整个事务基础设施,与@EnableAspectJAutoProxy共同构建声明式事务的运行环境。
与下一章的衔接
本章学完后,你已经掌握了企业级数据访问和事务控制。下一章「Spring Boot自动配置基础」将解决:如何摆脱繁琐的XML和JavaConfig配置,让框架根据classpath和已有Bean自动装配整套基础设施——包括自动配置数据源、事务管理器、以及本章所学的全套事务注解支持。Spring Boot的"约定大于配置"思想,是对前面所有章节手动配置方式的革命性简化。