最近看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机制啦。我擦
分享到:
相关推荐
spring、ioc、aop、callback,自己写着玩,感觉挺不错的,也能加深对框架等理解
Spring 数据库访问的支持。包括统一异常体系和Spring的Template+CallBack的解读
ASP.NET2.0实现无刷新客户端回调的Callback机制
直接调用就可以了。如要要其他警示框自己在sweet中拿出来
json+callback实现无刷新demo,短小精悍
微软的CallBack机制,只是了解了一下。不知道怎么实现复杂的功能,有时间网上查查,不知道有多少人在用。入门实例:http://blog.csdn.net/greatverve/archive/2008/12/23/3588353.aspx我的网址:www.0379zd.com
6.9 Template/Callback 简化业务方法 6.10 版面:一棵自身循环的树 6.11 版面与帖子:Master/Detail 主从关系 6.12 帖子树及其分页 6.13 与Web层交互 6.14 帖子的多形扩展:投票 6.15 移植到Hibernate 3 6.16 ...
android中的Handler和Callback机制.pdf
6.9 Template/Callback 简化业务方法 6.10 版面:一棵自身循环的树 6.11 版面与帖子:Master/Detail 主从关系 6.12 帖子树及其分页 6.13 与Web层交互 6.14 帖子的多形扩展:投票 6.15 移植到Hibernate 3 6.16 ...
Spring 集成事件总线 Java/Spring 项目的事件总线库,基于 Spring 集成框架。 事件驱动架构促进了事件发布者和事件订阅者之间松散耦合的交互。 事件本质上是具有附加语义的消息,这就是为什么许多事件基础设施都...
最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义,本文给大家介绍JAVA的回调机制CallBack,感兴趣的...
简单易懂,快速了解WCF如何CallBack
这是一个及其简单的但是又实用的callBack
callback
C++中回调(CallBack)的使用思路C++中回调(CallBack)的使用思路C++中回调(CallBack)的使用思路
一个基于ajax+ASP.NET实现的客户端Callback 控件源码例子。
本文实例分析了C++中回调函数(CallBack)的用法。分享给大家供大家参考。具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。 其错误是普通的C++成员函数都隐含了一个传递...
通过简单的自定义Dialog来理解接口回调callback机制
博文链接:https://sharpkit.iteye.com/blog/235113