@EnableTransactionManagement注解的作用和示例

@EnableTransactionManagement 是 Spring 提供的一个注解,用于启用 Spring 的事务管理功能。

使用 @EnableTransactionManagement 注解时,Spring 将会创建一个基于注解的事务管理器,它会在你使用 @Transactional 注解的方法上开启事务。在使用 @Transactional 注解时,你可以通过指定传播行为、隔离级别和超时时间等属性,来控制事务的行为。

下面是一个使用 @EnableTransactionManagement 和 @Transactional 的示例:

@Configuration
@EnableTransactionManagement
public class AppConfig {
    // 配置数据源等...

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }
}

@Service
public class UserService {
    @Autowired
    private UserDAO userDAO;

    @Transactional
    public void updateUser(User user) {
        userDAO.updateUser(user);
    }
}

@Repository
public class UserDAO {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void updateUser(User user) {
        jdbcTemplate.update("UPDATE users SET name = ? WHERE id = ?", user.getName(), user.getId());
    }
}

在上面的例子中,@EnableTransactionManagement 注解在 AppConfig 类上,表示启用 Spring 的事务管理功能。transactionManager 方法返回一个 PlatformTransactionManager 对象,它会被 Spring 自动识别为事务管理器。@Transactional 注解标记了 UserService 类中的 updateUser 方法,表示这个方法需要在事务中运行。在 UserDAO 类中,使用了 Spring 的 JdbcTemplate 来访问数据库,而 JdbcTemplate 会自动使用事务。当 updateUser 方法被调用时,如果当前没有事务,Spring 将会开启一个新的事务,执行 updateUser 方法,然后提交或回滚事务。