回调:类A调用类B的b方法,而在b方法执行过程中,b方法又调用了类A的a方法,这个过程就叫做回调,而方法a就叫回调函数。(自己的理解)
一般来说,类A不会调用方法a,他只提供方法a供类B调用,由于类B不知道类A中的方法a是长的什么样,所以类B会跟类A约定好接口规范(函数原型),这样,类A会通过类B的一个方法r,告诉类B,我要调用你的方法b,这个过程就叫做回调函数的注册,这方法r就是一个注册函数。
现实的例子:
其实回调,简单的可以说是:将自己的引用传给别的方法,在别的方法里面,通过自己的引用调用自己的方法。
将电话号码(自己的引用)给朋友,朋友再打电话(调用自己引用的方法)回拨给自己
应用场景:模版方法很常用
java回调机制的通俗理解
回调的通俗理解:你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以解决这个问题,但是需要一些时间,那么你不可能一直拿着电话在那里等,你会把你的电话号码告诉他,让他解决之后打电话通知你。即回调就是体现在你的同学又反过来拨打你的号码。 拿这个例子类比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模式合用的简单与灵活,这里只是利于理解一点。
分享到:
相关推荐
一张图让你通俗易懂得理解java反射机制!
尽管回调机制通常被简化为两个函数之间的交互,但实际上,起始函数在这个过程中起到了关键的作用,它决定了何时以及如何使用回调。 回调函数在很多场景下都有应用,比如事件处理、异步编程、数据处理等。它们让代码...
### 回调函数详解 #### 一、回调函数的基本概念 在计算机编程中,回调函数是一种特殊的函数,它被作为参数...通过理解和掌握回调函数的工作原理及其应用场景,开发者可以更高效地解决问题并构建出高质量的软件产品。
通俗讲解Java绘图功能机制以及绘图框架的源码
本篇将通俗易懂地介绍几种常见的设计模式,并提供相关的Java代码示例。 首先,设计模式主要分为三大类:创建模式、结构模式和行为模式。 **创建模式**关注的是对象的创建。例如: 1. **工厂模式**(Factory ...
在学习Java的过程中,理解这些基本概念对于掌握Java编程至关重要。随着经验的积累和对高级特性的学习,如泛型、并发编程、网络编程和流式处理等,可以进一步提高编程技能。Java社区提供了丰富的资源和工具来帮助...
### 通俗易懂的Java IO讲解 在Java中,输入输出流(IO)是一个非常重要的概念,它涉及到了数据如何从一个地方传输到另一个地方。本文将深入浅出地介绍Java IO的基础概念,并通过实例帮助读者更好地理解这些概念。 ...
鉴于此,本文力争以通俗的语言讲解PID的各个含义。 PID控制是自动化控制领域应用非常广的控制方式,P代表比例,I代表积分,D代表微分,从这些名词中可以看出,PID控制是基于数学中一项重要的分支:微积分学为基础的...
本资源提供了23种设计模式的Java实现,通过具体的代码示例帮助开发者深入理解并掌握这些模式。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。防止多线程环境下多个实例的产生,常用于...
本资源“通俗易懂的Java设计模式”旨在帮助初学者和有一定经验的开发者更好地理解和应用这些模式。 首先,设计模式的基本分类包括创建型、结构型和行为型三大类。创建型设计模式如单例(Singleton)、工厂方法...
通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf
### WebService之通俗理解 #### 一、WebService简介与应用场景 WebService是一种标准的网络服务,它使得不同系统之间可以通过标准的协议(如HTTP)进行数据交换和服务调用,而无需关心底层实现细节。WebService...
这套教程以其通俗易懂的语言和丰富的实例,深受广大JAVA学习者的喜爱。下面我们将深入探讨教程中的关键知识点。 1. **JAVA基础语法**:在第一天的学习中,通常会介绍JAVA的基本结构,包括如何编写第一个"Hello, ...
这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...
视频教程“Java零基础学习视频通俗易懂”很可能涵盖了以上这些主题,并以易于理解的方式进行讲解。通过这个教程,新手可以系统地学习Java编程,为后续的进阶学习打下坚实的基础。同时,阅读提供的"Java零基础学习...
很详细 又不啰嗦的 ppt教程 通俗易懂不啰嗦
Java2048是一款基于Java编程语言开发的2048小游戏,它的设计简洁明了,界面风格优雅,且具有良好的用户体验。...通过分析和理解这个项目的源代码,可以深入理解Java语言的特性和游戏开发的基本流程。
本文将详细讲解Java中类的相关概念,并通过通俗易懂的例子帮助初学者更好地理解类的基本原理及其应用。此外,文章还将涉及继承等高级主题。 #### 二、Java中的类 在Java中,类是一种定义对象的数据结构和行为的...
这份名为“Java开发中名词的通俗解释共2页.pdf”的压缩文件,显然提供了一份简明扼要的Java编程术语解析,旨在帮助初学者或有经验的开发者更好地理解Java开发中的关键概念。虽然压缩包中似乎还有一个名为“赚钱项目...
ava反射机制 概述:通俗地讲Java反射就是通过类名获得类的实例的方法。java.lang.reflect提供了实现Java反射的API。