第13章 Spring事务与数据访问
面试频率: ★★★★★
@Transactional你天天在用,但面试官不会只问"怎么用"。他们会问:“@Transactional的实现原理是什么?AOP代理是怎么创建的?”“事务传播行为有几种?REQUIRED和REQUIRES_NEW有什么区别?”“事务为什么会失效?列举失效的场景。”"MyBatis的一级缓存为什么在Spring整合后会失效?"这章咱们就把Spring事务和数据访问讲透。
13.1 @Transactional原理——AOP代理/事务管理器/连接绑定ThreadLocal
@Transactional加在方法上,事务就自动开启了,这背后发生了什么?
核心原理剖析
Spring事务的本质是AOP代理 + ThreadLocal连接绑定:
- Spring为带
@Transactional的Bean创建代理对象 - 调用代理对象的方法时,拦截器
TransactionInterceptor介入 - 拦截器通过
PlatformTransactionManager开启事务 - 事务管理器从DataSource获取Connection,绑定到ThreadLocal <