回调的通俗理解:你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以解决这个问题,但是需要一些时间,那么你不可能一直拿着电话在那里等,你会把你的电话号码告诉他,让他解决之后打电话通知你。即回调就是体现在你的同学又反过来拨打你的号码。 拿这个例子类比Ajax中的回调机制以及Spring中HibernateTemplate用到的回调+模板机制,可以更容易地理解回调机制。
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.onreadystatechange = callback 就是表示在state改变时调用callback函数,而这个callback就是一个回调函数。
类比:xmlHttp发出请求就相当于你打电话给你的同学,xmlHttp不知道state何时发生变化,就相当于你不知道你的同学何时能解决问题。Callback函数就相当于你的电话号码,
state发生变化时会调用callback函数,同样你的同学解决问题后会打电话通知你。
Spring中HibernateTemplate的回调机制与模板方法
HibernateTemplaet的源码很复杂,我们可以写一段简单的代码来模拟一下:
interface CallBack{
public void doCRUD();
}
public class HibernateTemplate {
public void execute(CallBack action){
getConnection();
action.doCRUD();
releaseConnection();
}
public void add(){
execute(new CallBack(){
public void doCRUD(){
System.out.println("执行add操作...");
}
});
}
public void delete(){
execute(new CallBack(){
public void doCRUD(){
System.out.println("执行delete操作...");
}
});
}
public void getConnection(){
System.out.println("获得连接...");
}
public void releaseConnection(){
System.out.println("释放连接...");
}
}
类比:execute方法可以体现出模板模式。以add方法为例,调用execute方法就相当于你打电话给你的同学,但是你的同学说需要时间,就像execute方法需要首先获得连接一样,于是你把CallBack匿名类传递给它,在它获得连接之后会执行你的add操作,这就相当于你把电话号码告诉你的同学,他解决问题之后再打给你一样。当然这种通俗理解不能很好地体现出Spring中的Callback模式和Template模式合用的简单与灵活,这里只是利于理解一点。
分享到:
相关推荐
5. **处理响应**:在回调函数中,通过检查`readyState`和`status`属性判断请求是否成功,然后读取`responseText`或`responseXML`获取数据。 这个实例可能包含以下内容: - **DWR(Direct Web Remoting)**:DWR是...
- Groovy支持闭包,这是一种强大的函数式编程工具,可以用于实现回调、迭代等功能。 3. **脚本编程** - Groovy可以作为脚本语言运行,无需主类或者main方法。这使得它非常适合编写简单的任务脚本或者自动化测试。...
`Call`主要用于单个方法调用,而`Execute`则适合批量调用或执行有回调函数的方法。 5. **安全性**:DWR通过白名单机制来限制JavaScript可以访问的Java类和方法,防止恶意攻击。开发者需要在配置文件中指定允许的...
- **异步I/O** 调用立即返回,操作系统负责处理数据准备,当数据就绪时,通过回调或事件通知应用程序。异步I/O能提高系统吞吐量,尤其在高并发场景下。 5. **协程** - **协程** 是轻量级的线程,用户态的上下文...
4. **异步编程**:讲解事件循环、回调函数、Promise、async/await等处理异步操作的方法,帮助开发者理解和解决JavaScript的回调地狱问题。 5. **DOM操作**:如何通过JavaScript来操作文档对象模型(DOM),实现页面...
这种将函数作为参数传递的机制称为回调函数,常用于异步编程和事件处理。 2. **函数作为返回值**: 函数可以返回另一个函数。当一个函数执行完毕并返回一个函数实例时,这个返回的函数仍然可以访问其外部函数的...
- **特点**:相较于其他中文技术书籍,本书语言通俗易懂,易于理解。 #### 二、体系结构 - **总览**:介绍了Hibernate框架的整体架构设计,包括核心组件如SessionFactory、Session等的功能及交互方式。 - **JMX集成...
结合事件机制,可以实现回调和异步编程,常见于GUI应用和多线程编程。 10. **泛型**:泛型允许创建可重用的类型,如泛型类、接口和方法,以提高代码的灵活性和效率。 11. **LINQ(Language Integrated Query)**:...