在 Spring 框架中,@Transactional 注解是声明式事务管理的核心。它允许开发者通过简单的注解配置,将事务管理逻辑从业务代码中剥离,极大地简化了事务控制。
1. 什么是 @Transactional
@Transactional 是 Spring 提供的声明式事务管理注解,用于标识方法或类需要被事务管理。当标注了该注解的方法被调用时,Spring 会在方法执行前开启事务,方法执行后根据是否抛出异常来决定提交或回滚事务。
作用:
- 简化事务代码:无需手动管理
Connection或Transaction对象。 - 声明式事务:通过 AOP 实现,业务代码与事务逻辑解耦。
- 灵活配置:支持事务传播行为、隔离级别、超时、只读等属性。
2. 基本用法
2.1 在方法上使用
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void createUser(User user) {
userMapper.insert(user);
// 其他业务操作...
}
}
2.2 在类上使用
@Service
@Transactional
public class UserService {
// 类中的所有 public 方法都将被事务管理
}
- 标注在类上时,该类的所有 public 方法都会被事务管理。
- 方法上的注解会覆盖类上的注解。
2.3 注意事项
- 默认情况下,只有
public方法才支持@Transactional。如果标注在protected、private或包可见的方法上,Spring 不会应用事务(但不会报错,只是无效)。 - 必须通过 Spring 代理对象调用方法,直接调用(如
this.createUser(...))会导致事务失效。
3. 主要属性详解
@Transactional 提供了丰富的属性,用于精细控制事务行为。
| 属性 | 类型 | 说明 |
|---|---|---|
value / transactionManager |

