Java面试题更新 2026-08-05

Spring 支持哪几种事务管理类型,Spring 的事务实现方式和实现原理是什么?

技术原理Java

考察说明

考查对 Spring 事务管理类型、实现方式及底层原理的理解。

回答思路

  1. 【回答框架 1】Spring 事务管理分为编程式事务和声明式事务两种类型。编程式事务通过 TransactionTemplate 或 PlatformTransactionManager 手动控制事务的提交与回滚;声明式事务基于 AOP,通过 @Transactional 注解或 XML 配置实现,将事务管理与业务代码解耦。
  2. 【回答框架 2】声明式事务是主流方式,其实现核心是 AOP 代理。Spring 通过 ProxyFactory 为目标对象创建代理,在方法调用前开启事务,方法执行后根据异常情况提交或回滚。代理方式包括 JDK 动态代理(基于接口)和 CGLIB 代理(基于类),Spring Boot 2.x 默认使用 CGLIB。
  3. 【回答框架 3】事务管理器的抽象是 PlatformTransactionManager,它定义了 getTransaction、commit、rollback 三个方法。具体实现包括 DataSourceTransactionManager(JDBC/MyBatis)、JpaTransactionManager(JPA/Hibernate)、JtaTransactionManager(分布式事务)等。
  4. 【回答框架 4】实现原理结合了 AOP 和 ThreadLocal:事务信息(如连接、隔离级别、传播行为)绑定到当前线程的 ThreadLocal 中,保证同一线程内多个 DAO 操作共享同一事务连接。@Transactional 通过拦截器(TransactionInterceptor)解析注解属性,并调用事务管理器完成事务控制。
  5. 【回答框架 5】事务传播行为(如 REQUIRED、REQUIRES_NEW)也由事务管理器在 getTransaction 时处理,决定是新建事务还是加入现有事务。隔离级别和回滚规则也在此阶段生效。理解这些机制有助于排查事务失效问题,如自调用或方法非 public 导致的代理失效。
  6. 【关键点 1】Spring 事务类型分为编程式事务和声明式事务,声明式基于 AOP 实现。
  7. 【关键点 2】核心抽象是 PlatformTransactionManager,包含 getTransaction、commit、rollback 方法。
  8. 【关键点 3】实现原理结合 AOP 代理、ThreadLocal 绑定事务资源和 TransactionInterceptor 拦截。
  9. 【关键点 4】事务传播行为和隔离级别在 getTransaction 时处理,影响事务的加入或新建。
  10. 【关键点 5】事务失效常见原因包括自调用、非 public 方法、代理未生效等。
  11. 【易错点 1】自调用(同类内部方法调用)不会经过代理,导致事务注解失效。
  12. 【易错点 2】仅将事务注解加在非 public 方法上可能不生效,需确保方法通过代理调用。
  13. 【易错点 3】事务回滚默认仅针对 RuntimeException 和 Error,检查异常默认不回滚,需配置 rollbackFor。