您的位置:首页 > 其它

sping中TransactionTemplate对Template模式的另一种实现方式

2012-09-23 12:42 477 查看
在sping中提供了另一种实现template模式的方法,利用接口回调函数.

(1)TransactionTemplate的示例代码:

public class TransactionTemplate extends DefaultTransactionDefinition implements InitializingBean{

..........

//进行事务处理的骨架,指明事务处理的顺序

public Object execute(TransactionCallback action)throws TransactionException{

TransactionStatus status=this.transactionManager.getTransaction(this);

Object result=null;

try{

result=action.doInTransaction(status);

}catch(RuntimeException ex){

rollbackOnException(status,ex);

throw ex;

}

catch(Error err){

rollbackOnException(status,err);

throw err;

}

this.transactionManager.commit(status);

return result;

}

//事务处理回调时调用

private void rollbackOnException(TransactionStatus status,Throwable ex)throws TransactionException{

try{

}catch(RuntimeException ex2){

throw ex2;

}

catch(Error err){

throw err;

}

}
}

说明:

这里TransactionTemplate 没有使用抽象类,在它的execute()方法里定义事务处理的骨架代码.但execute()方法的TransactionCallback参数却是个接口,在这接口中定义了doInTransaction()方法

(2)

//********TransactionCallback.java*****

public interface TransactionCallback{

Object doInTransaction(TransactionStatus status);

}

(3)只要实现TransactionCallback接口,并在doInTransaction()方法里编写具体要进行的事务处理的代码就可以 了.
............
..........

..
..
//事务处理方法
public int create(String s){

TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);

Object result=transactionTemplate.execute(
new TransactionCallback(){

public Object doInTransaction(TransactionStatus status)
{
//执行新增操作....
......
//返回值
result resultO;

}
});

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: