上面的二段配置文件代码是常用的spring事务管理配置
看完上面的二段代码的配置和Ruby on Rails没有一行配置的ActiveRecord相比差太远相对麻烦拖拉没有办法暂时spring实现中事务管理主要也只是这两种方法
使用spring通常会与hibernate/ibatis集成作数据访问层这也是大多java开发人员常用字的技术框架下面如spring和hibernate结合做数据访问层暂时不讨论有泛型存在的情况只是简单举一个例子把事务管理放在数据访问层下面说出我自己心中理想的spring事务管理
约定高于配置首先规定对于querylistshowgetfind等开头的方法采用PROPAGATION_REQUIREDreadOnly级的事务定义而对于setsaveupdateremovedelete等开头的方法采用PROPAGATION_REQUIRED级的事务定义基本上能满足大部分开发的需要然后只要在需要事务管理配置的类的前加一句元数据即可例如spring针对hibernate开发的@TransactionAop(hibernate)类似的有@TransactionAop(hibernate)@TransactionAop(ibatis)@TransactionAop(jdo)之类元数据的
举一个例子看一段代码其中UserDAO是一个接口大家都应该看得出来只加了一行的元数据@TransactionAop(hibernate)就可以使得这一个UserDAHibernate类有事务管理的功能因为它命名的方法符合spring的约定(当然这不是真的spring中也没有这一个功能这只是我个人一点想法提出来而已)
代码
package orgappfusedaohibernate;
import javautilList;
import orgappfusedaoUserDAO;
import orgappfusemodelUser;
import orgspringframeworkormhibernatesupportHibernateDaoSupport;
span style=color:blue; > //假设有下面这一个类
import orgspringframeworkormhibernatesupportannotationsTransactionAop; </span>
<span style=color:blue; >@TransactionAop(hibernate)</span>
public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO{
public User getUser(Long userId) {
return (User)thisgetHibernateTemplate()get(Userclass userId);
}
public List getUsers() {
return thisgetHibernateTemplate()find(from User);
}
public void removeUser(Long userId) {
Object user = thisgetHibernateTemplate()load(Userclass userId);
thisgetHibernateTemplate()delete(user);
}
public void saveUser(User user) {
thisgetHibernateTemplate()saveOrUpdate(user);
}
}
spring的事务定义很灵活很广定义七种的传播行为和五种的隔离常量但用得比较多还是PROPAGATION_REQUIRED和PROPAGATION_REQUIREDreadOnly所以我提出上面所述的一点假想可以简便开发
简单就是美
[] []