在上一篇文章中讲了Spring的JDBC框架—JdbcTemplate模板类。在JdbcTemplate所实现的接口JdbcOperations中并没有用传统的JDBC API类和方法,而是使用了CallBack参数。在JdbcTemplate中对JdbcOperations的方法进行实现时才真正使用传统JDBC API中的类和方法。这里的CallBack是什么?为什么要用?实现机制又是什么?
一、CallBack是什么?
CallBack很多时候我们叫"回调",也叫"回叫"。就像打电话时对方不在,但在对方手机上保留了未接来电,等对方看见未接来电时再使用未接来电回叫你。
有了这个例子,可以很好地理解在我们的程序开发过程中了。
在一个应用程序中,其中要对一个数组进行排序。由于排序算法效率的问题,暂时不知道要采用什么排序算法比较合理。此时就可以在原本打算实现排序算法的地方(方法)定义一个CallBack参数,然后调用这个CallBack参数(一般CallBack定义为一个接口,然后调用这个接口的方法)。而在真正调用排序算法时才实例化这个CallBack参数,来决定使用何种排序算法来实现。
二、为什么要用CallBack?
从上面我们可以知道,使用CallBack可以使我们的应用程序更加灵活。
三、CallBack的实现机制?
CallBack一般是在原来打算实现功能的方法中定义为方法的参数,然后调用。而具体CallBack的实现是在真正使用时才实例化CallBack,一般采用匿名内部类来实现实际的功能。
四、实例:以上面的排序为例讲解回调的定义和实现。
1、常规方式实现功能:不用CallBack。
package callback;
public class NoUseCallBackSort {
/**
* 具体排序功能实现的定义
*/
public static void sort(int[] a){
//具体的排序功能实现代码
}
/**
* 调用排序功能的方法
*/
public void exeSort(){
int[] arr =new int[5]{31,5,956,7,89};
sort(srr);
}
public static void main(String[] args) {
NoUseCallBackSort test=new NoUseCallBackSort();
test.exeSort();
}
}
2、使用CallBack的实现:包含两个Java文件
一个是CallBack接口的定义:
package callback;
public interface CallBack {
//执行回调操作的方法
void execute();
}
然后就是调用CallBack来实现排序的类文件:
ackage callback;
public class UseCallBackSort {
/**
* 实现排序功能,通过定义CallBack接口的execute方法
* @param callBack
*/
public void sort(int[] a,CallBack callBack) {
callBack.execute(); ///进行回调操作
}
public static void main(String[] args) {
UseCallBackSort test = new UseCallBackSort(); int arr[]={3,2,4,6,5 };
test.sort(arr,new CallBack(){
//定义execute方法
public void execute(){
//这里可以加放一个或多个排序方法
NoUseCallBackSort.exeSort();
}
});
}
}
用匿名内部类来实例化CallBack。