`
cectsky
  • 浏览: 44628 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

【Spring】学习spring整合hibernate的callback+template机制

阅读更多

 

最近看spring的时候,看到JdbcTemplate的时候,发现其实现方法极其ugly。

 

概念:(从网上抄的,哥不懂啊

1、callback机制。

摘自http://www.iteye.com/topic/727249 感觉有点通俗。

 

你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以解决这个问题,但是需要一些时间,那么你不可能一直拿着电话在那里等,你会把你的电话号码告诉他,让他解决之后打电话通知你。即回调就是体现在你的同学又反过来拨打你的号码。

 

解释:将电话号码(自己的引用)给朋友,朋友再打电话(调用自己引用的方法)回拨给自己

 

Ajax中的异步+回调机制:

function test{   
   if(window.ActiveXObject){   
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");   
   }else if(window.XMLHttpRequest){   
      xmlHttp = new XMLHttpRequest();   
   }   
   xmlHttp.onreadystatechange = callback;   
   xmlHttp.open(…);   
   xmlHttp.send(null);   
}     
  
function callback{ }     
 

类比:xmlHttp发出请求就相当于你打电话给你的同学,xmlHttp不知道state何时发生变化,就相当于你不知道你的同学何时能解决问题。Callback函数就相当于你的电话号码, 
state发生变化时会调用callback函数,同样你的同学解决问题后会打电话通知你

 

自己练习的一个小例子,用到的回调+模板机制:

 

TransactionTemplate tt = new TransactionTemplate(this.getTransactionManager());
//TransactionCallback is a interface which has only one abstract method
tt.execute(new TransactionCallback(){ 
	public Object doInTransaction(TransactionStatus status){
		JdbcTemplate jdbc = new JdbcTemplate(getDataSource());
		jdbc.update("inert into users(username) values('dd');");
		return null;
	}
});

 

public Object execute(TransactionCallback action) throws TransactionException {
  if (this.transactionManager instanceof CallbackPreferringPlatformTransactionManager) {
    return ((CallbackPreferringPlatformTransactionManager) this.transactionManager).execute(this, action);
  } else {
     TransactionStatus status = this.transactionManager.getTransaction(this);//模板,获取参数
     Object result = null;
     try {
         result = action.doInTransaction(status);//调用传入引用的方法,也就是我们自己定义的功能			}
    catch (RuntimeException ex) {
        //Transactional code threw application exception -> rollback
         rollbackOnException(status, ex);
         throw ex;
    }catch (Error err) {rollbackOnException(status, err);throw err;}
    this.transactionManager.commit(status);
    return result;
  }
}

 callback机制优点显而易见,不用extends JdbcTemplate,十分灵活

 

结论:如果template 的每个步骤都需要我们实现,那么用callback就很难定制了,但是如果只需要很少甚至就一个步骤(比如JDBC中的sql操作方法[不关心事务的,因为已经由Template定制好了,我日!])就可以采用callback机制啦。我擦

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics