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

本文介绍了Spring中利用接口回调函数实现事务处理的方法,通过TransactionTemplate类展示了如何使用TransactionCallback接口完成特定的事务处理任务。
在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; 
       
          } 
          }); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值