zoukankan      html  css  js  c++  java
  • sping中TransactionTemplate对Template模式的另一种实现方式

    在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; 
           
              } 
              }); 

  • 相关阅读:
    SAP Hybris使用recipe进行安装时,是如何执行ant命令的?
    实时电商数仓(三)之数据采集(二)搭建日志采集系统的集群(二)建立父工程
    实时电商数仓(一)之系统架构
    gdb 条件断点 + 多线程 +attach
    dpdk tx_pkt_burst rte_pktmbuf_free mbuf释放
    dpdk 网卡初始化 —— 收包
    dpdk 版本变动修改
    rte_mempool_get_priv
    mempool + ring test
    dpdk mempool debug
  • 原文地址:https://www.cnblogs.com/chenying99/p/2698854.html
Copyright © 2011-2022 走看看