基於註解配置的聲明式事務控制
要使用註解,就要導入xmlns:context
的名稱空間,以及配置包掃描的路徑<context:component-scan>
1. 配置事務管理器
與基於XML的配置相同,第一步也是配置DataSourceTransactionManager
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2. 註解事務支持<tx:annotation-driven>
<tx:annotation-driven></tx:annotation-driven>
3. @Transaction
註解標註事務
- 標註一個類,表示這個類中的所有方法都是事務
- 標註一個方法,表示這個方法是事務
示例
要求:一個Service類中的查詢方法getAll()的傳播類型爲SUPPORTS
;其他方法的傳播類型爲REQUIRED
。
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
@Service("userService")
public class UserServiceImpl {
@Autowired
private UserDaoImpl userDao;
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public List<User> getAll(){
return userDao.getAll();
}
public void transfer(String from, String to, double money){
User fromUser = userDao.getUserByUsername(from);
User toUser = userDao.getUserByUsername(to);
fromUser.setAccount(fromUser.getAccount() - money);
toUser.setAccount(toUser.getAccount() + money);
userDao.update(fromUser);
userDao.update(toUser);
}
}