即回调就是体现在你的同学又反过来拨打你的号码。 拿这个例子类比Ajax中的回调机制以及Spring中HibernateTemplate用到的回调+模板机制,可以更容易地理解回调机制。 Ajax代码:Java代码 functiontest{if(window.ActiveXObject){xmlHttp=newActiveXObject( Microsoft.XMLHTTP);}elseif(window.XMLHttpRequest){xmlHttp=newXMLHttpRequest();}xmlHttp.onreadystatechange=callback; xmlHttp.open(…); xmlHttp.send(null);} functioncallback{} 其中xmlHttp.onreadystatechange = callback 就是表示在state改变时调用callback函数,而这个callback就是一个回调函数。类比:xmlHttp发出请求就相当于你打电话给你的同学,xmlHttp不知道state何时发生变化,就相当于你不知道你的同学何时能解决问题。Callback函数就相当于你的电话号码, state发生变化时会调用callback函数,同样你的同学解决问题后会打电话通知你。 Spring中HibernateTemplate的回调机制与模板方法 HibernateTemplaet的源码很复杂,我们可以写一段简单的代码来模拟一下:Java代码interfaceCallBack{publicvoiddoCRUD();}publicclassHibernateTemplate{publicvoidexecute(CallBackaction){ getConnection(); action.doCRUD(); releaseConnection();}publicvoidadd(){execute(newCallBack(){publicvoiddoCRUD(){System.out.println( 执行add操作...);}});}publicvoiddelete(){execute(newCallBack(){publicvoiddoCRUD(){System.out.println( 执行delete操作...);}});}publicvoidgetConnection(){ System.out.println( 获得连接...);}publicvoidreleaseConnection(){ 释放连接...);}}类比:execute方法可以体现出模板模式。以add方法为例,调用execute方法就相当于你打电话给你的同学,但是你的同学说需要时间,就像execute方法需要首先获得连接一样,于是你把CallBack匿名类传递给它,在它获得连接之后会执行你的add操作,这就相当于你把电话号码告诉你的同学,他解决问题之后再打给你一样。