@Transactional 注解的生效场景详解

@Transactional 注解的生效场景详解
1. 引言在 Spring 框架中,@Transactional注解是声明式事务管理的核心。它极大地简化了事务控制逻辑,但开发者必须清晰理解其生效的边界条件,否则极易踩坑。本文将系统性地梳理@Transactional注解生效的关键场景与失效的常见陷阱。2. 生效的核心前提@Transactional注解要生效,必须满足以下基本条件:Spring 事务管理已启用:通常通过@EnableTransactionManagement注解或在 XML 中配置tx:annotation-driven/。方法所在类被 Spring 容器管理:即该类必须是一个 Spring Bean(例如,被@Component、@Service、@Repository等注解标记)。事务管理器(PlatformTransactionManager)已正确配置。方法必须是public的:Spring 的 AOP 代理(默认使用 JDK 动态代理或 CGLIB)只能拦截公共方法。3. 生效场景详解3.1 外部调用代理对象的方法Spring 通过代理机制实现事务。只有通过代理对象(即从 Spring 容器中获取的 Bean)调用的方法,事务拦截器才会生效。@Service public class UserService { @Transactional public void createUser(User user) { // 事务生效:当其他类通过