声明式事务注解主要有以下要点:
- 1.向IOC容器注入数据源
- 2.用@EnableTransactionManager在注解类上开启基于注解的事务管理功能
- 3. 向IOC容器中注入平台的事务管理器PlatformTransactionManger的实现类
- 4.在需要添加事务的方法上加上@Transactional注解,如果加在类上,表示当前类中的所有方法都是事务型的。
例子:
1.配置类:
@EnableTransactionManagement //开启基于注解的事务管理功能
@ComponentScan("com.wusu.transaction")
@Configuration
public class MainConfig {
@Bean //引入数据源
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
return dataSource;
}
@Bean //基于平台的事务管理器,这个也需要注册bean,这个接口有很多实现类 //
public PlatformTransactionManager platformTransactionManager() throws PropertyVetoException {
//这里需要传入数据源,这里的dataSource()方法只是从IOC容器中获取,并不是像上面的那样new一个dataSource
return new DataSourceTransactionManager(dataSource());
}
}
2. UserService
@Service
public class UserService {
private UserDAO userDAO;
@Transactional
public void insert(){
userDAO.insert();
//...
System.out.println("userService insert ...");
}
}