java回调函数

    在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。

    在Java里面,我们使用接口来实现回调。

    所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。下面是例子。

      1.  首先定义一个类Caller,按照上面的定义就是程序员A写的程序a,这个类里面保存一个接口引用。

public class Caller {  
    private MyCallInterface callInterface;  
      
    public Caller() {  
    }  
      
    public void setCallFunc(MyCallInterface callInterface) {  
        this.callInterface = callInterface;  
    }  
      
    public void call() {  
        callInterface.printName();  
    }  
}

    2.  当然需要接口的定义,为了方便程序员B根据我的定义编写程序实现接口。

public interface MyCallInterface {  
    public void  printName();  
}

     3.  第三是定义程序员B写的程序b

public class Client implements MyCallInterface {  
  
    @Override  
    public void printName() {  
        System.out.println("This is the client printName method");  
    }  
}

      4.  测试如下

public class Test {  
    public static void main(String[] args) {  
        Caller caller = new Caller();  
        caller.setCallFunc(new Client());  
        caller.call();  
    }  
}

看到这里应该明白什么是回调了,有些文章介绍的很好,但是刚开始没看明白,是因为把第3步的类省略,直接写成匿名类了。

    5.  在测试方法中直接使用匿名类,省去第3步。

public class Test {  
    public static void main(String[] args) {  
        Caller caller = new Caller();  
//      caller.setCallFunc(new Client());  
        caller.setCallFunc(new MyCallInterface() {  
            public void printName() {  
                System.out.println("This is the client printName method");  
            }  
        });  
        caller.call();  
    }  
}

    比如我们在用框架的时候,一般直接调用框架提供的API就可以了,但回调不同,当框架不能满足需求,我们想让框架来调用自己的类方法,怎么做呢?总不至于去修改框架吧。许多优秀的框架提几乎都供了相关的接口,我们只需要实现相关接口,即可完成了注册,然后在合适的时候让框架来调用我们自己的类,还记不记得我们在使用Struts时,当我们编写Action时,就需要继承Action类,然后实现execute()方法,在execute()方法中写咱们自己的业务逻辑代码,完成对用户请求的处理。由此可以猜测,框架和容器中会提供大量的回调接口,以满足个性化的定制。

    不知道上面这个例子懂了没有?我们现在可以想象Filter和Interceptor的区别了,这两者其中最大的一个区别是Filter是基于回调函数,需要容器的支持,没有容器是无法回调doFilter()方法,而Interceptor是基于Java的反射机制的,和容器无关。

    为了使我们写的函数接近完美,就把一部分功能外包给别人,让别人个性化定制,至于别人怎么实现不管,我唯一要做的就是定义好相关接口,这一设计允许了底层代码调用高层定义的子程序。

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1657853

时间: 2024-08-03 17:38:11

java回调函数的相关文章

再谈java回调函数_java

又遇到了回调函数,这次打算写下来分享一下. 所谓回调函数,或者在面向对象语言里叫回调方法,简单点讲,就是回头在某个时间(事件发生)被调用的函数. 再详细点:就是一个函数A,作为参数,传入了另一个函数B,然后被B在某个时间调用. 这里可以有疑问了,既然是一个函数调用另一个函数,可以在函数体里面调用啊,为什么还要把函数作为参数传到另一个函数里被调用?何况还有一些语言(比如java)不支持把函数作为参数. 对的,确实可以在函数体里调用另一个函数,功能上好像是没差别的,但是这里有一个问题,就是你要调用的

一个超简单的jQuery回调函数例子(分享)_jquery

jQuery回调函数简单使用 比如说,我们想要点击某个按钮后触发事件, 先把一些指定内容给隐藏掉, 然后跳出相关信息的对话框. 如果使用普通的方法, 不用回调函数的话, 会有怎么样的效果呢? 效果是先弹出对话框再隐藏内容, 然后再隐藏指定内容. 这显然不是我们想要的效果, 如果使用回调函数,就可以解决这个问题. 当然,回调函数功能远不只这么简单-- 具体的代码如下: <%@ page language="java" import="java.util.*" p

用 Java 接口实现回调函数的等价功能

摘要在 Java 支持方法指针之前,Java 接口不能提供一种实现回调的好方法.假如您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧.熟悉 MS-Windows 和 X Window System 事件驱动编程模型的开发人员,习惯于传递在某种事件发生时调用(即"回调")的函数指针.Java 的面向对象模型目前并不支持方法指针,这样似乎就不可能使用这种很好的机制.但我们并不是一点办法都没有! Java 的接口支持提供了一种获得回调的等价功能的机制.其技巧就是:定义一个简单

怎样理解java中的回调函数

问题描述 最近遇到回调函数问题,有点不太理解,到底什么是回调函数,有何用途,与命令模式是不是有点关系! 解决方案 是可以这样说的·这个在spring中尤其明显,比如spring中的运用到的AOP2.0以后的框架,在spring配置文件中引入aop2.0以后的命名空间后可以这样配置:<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.or

理解javascript 回调函数

在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫做匿名回调函数.因此callback 不一定用于异步,一般同步(阻塞)的场景下也经常用到回调,比如要求执行某些操作后执行回调函数. 例子 一个同步(阻塞)中使用回调的例子,目的是在func1代码执行完成后执行func2. var func1=function(callback){     //do something

Jquery 实现层的拖动,支持回调函数

最近在写一个CMS内容管理系统,前台基本是用ajax异步请求服务器,通过ashx处理,返回json格式处理.由于需要更加人性化的界面,所以采用到了拖动层的操作. 以下是拖动层的主要核心方法,本来想写成插件的,考虑的没那么多时间,就以方法的方式了. /*  * Jquery 鼠标左键拖动面板  * coder:新生帝  * obj:jQuery选择器名称  * callback:回调函数(拖动停止要执行的函数),可通过$(this)获取 obj 对象  */  function movePanel

编写回调函数

有些Win32 API函数要求将一个函数指针作为自己的参数使用.Windows API函数随后就可以调用自变量函数(通常是在以后发生特定的事件时).这一技术就叫作"回调函数".回调函数的例子包括窗口进程以及我们在打印过程中设置的回调(为后台打印程序提供回调函数的地址,使其能更新状态,并在必要的时候中止打印). 另一个例子是API函数EnumWindows(),它能枚举目前系统内所有顶级窗口.EnumWindows()要求获取一个函数指针作为自己的参数,然后搜索由Windows内部维护的

C++回调函数用法

一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢? 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数. 而 那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作.至于如何定义回调函数,跟具体使用的 A

jacob操作dll,取ref回调函数

问题描述 jacob操作dll时,怎么取ref回调函数返回的值?如果有其他更好的方法操作DLL,求指导啊~~DLL方法:intBUSINESS_HANDLEAPI(stringbusinessCode,stringinputData,refstringoutData);我现在是这样写的ActiveXComponentdotnetCom=null;dotnetCom=newActiveXComponent("CInterface.Handler");StringoutData="