君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理
在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; 
       
          } 
          }); 

posted on 2012-09-23 12:42  刺猬的温驯  阅读(769)  评论(0)    收藏  举报