Java中的回调学习

原创 2004年07月04日 16:10:00

前段时间在学Hibernate的时候看了一下Spring中的对Hibernate的包装,其中的HibernateTemplate类中使用了execute(HibernateCallback action)来实际做各种Hibernate操作,其中HibernateCallback是一个用来回调的接口
      public interface HibernateCallback{
 Object doInHibernate(Session session) throws HibernateException,SQLException;
 }

这样各种不同的操作都可以通过实现自己的HibernateCallback接口来做,如save:
     public void save(final Object entity, final Serializable id) throws DataAccessException  {
  execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws  HibernateException {
    session.save(entity, id);
    return null;
   }
  });
 }


excute函数大概如下:
public Object execute(HibernateCallback action) throws DataAccessException {
.......
try {
   Object result = action.doInHibernate(session);
   flushIfNecessary(session, existingTransaction);
   return result;
  }
.........
}


JAVA中的回调大致就是定义一个interface,而调用者不需要知道这个interface的具体实现,只需要调用接口函数就可以。在上面Spring的例子中是用Inner class来把接口的实现传给调用者的,如果不是Inner class,那就需要把接口具体实现的引用传给调用者。如think in java中的例子:
//回调接口
public interface FilenameFilter {
          boolean accept(File dir, String name);
      }
//接口实现
class DirFilter implements FilenameFilter {
        private String afn;
        public DirFilter(String afn){
            this.afn = afn;
        }  
        public boolean accept(File dir, String name){
            String f = new File(name).getName();
            return f.indexOf(afn) != -1;
        }
    }
//调用的方法
       public String[] list(FilenameFilter filter)
//实际调用
      String[] list = file.list(new DirFilter("wf"));


这只是我看的JAVA中的回调,在软件模块调用关系中回调指的是:回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口 (参见http://www-900.ibm.com/developerWorks/cn/linux/l-callback/index.shtml)
套用到上面java的例子好象都没成立,被调用者都没有在接口被调用时也会调用对方的接口,可能这是回调机制和回调函数的区别吧?
在JAVA中实现回调机制也是可以的,比如在多线程程序中,子线程可以调用主线程中的某个函数来发送某些消息给主线程。这个例子在Java Network Programming 2nd的125页中有,这里只写点片段:
子线程:
public class CallbackDigest implement Runable{
....
public void run(){
...
CallbackDigestUserInterface.receiveDigest(..);
...
}
....
}

而在主程序中有:
public class CallbackDigestUserInterface{
...
public static void receiveDigest(){
........
}
...
}

了解了回调再去看Command模式就轻松的多 :)
http://www.jdon.com/designpatterns/command.htm
http://www.javaworld.com/javaworld/javatips/jw-javatip68.html

目前关于java中的callback我就知道这么多,不对或遗漏之处,请达人指正。

Java的接口回调与回调函数的解析

原文链接:Java中什么是接口回调?and Java回调函数的理解 什么是接口回调? 1.接口回调是什么[2] 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016年04月01日 00:14
  • 3047

java回调的学习

回调概念:    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双...
  • west_zx
  • west_zx
  • 2009年02月13日 10:28
  • 205

Java基础———Java中的回调与事件

1、基本概念         软件模块之间总是存在一定的联系,各个模块之间总是需要传递信息,eg:当驱动模块检测到键盘上的键被按下时需要通知界面模块。         回调是一种软件模块之间信息传递的...
  • fang_yang_wa
  • fang_yang_wa
  • 2017年05月05日 17:51
  • 177

java多线程回调方法的理解

java多线程使用回调方法的一个例子,可以加深对java多线程的回调方法的理解...
  • wenzhi20102321
  • wenzhi20102321
  • 2016年09月12日 13:07
  • 5756

Java中什么是接口回调?and Java回调函数的理解

http://blog.csdn.net/hack_bug/article/details/7625646 什么是接口回调? 1.接口回调是什么[2]? 接口回调是指:可...
  • leeo1010
  • leeo1010
  • 2014年05月26日 17:35
  • 5276

java的回调函数与javascript回调函数 对比

回调函数的使用场景: 1.js中:点击新增,填写数据,保存后,需要重新刷新父页面的数据(列表)。所以这时回调函数就派上用场了。 一般情况下,整个流程的走向是:A页面上有个点击按钮:点击按钮这个动作...
  • shenbushen
  • shenbushen
  • 2017年01月06日 20:57
  • 236

JAVA中实现线程相互调用或回调

使用场景: 在工作中,遇到同时两个线程A和B,按照通常的理解,A调用B以后A继续执行,但是在我目前的情况下需要B执行完毕以后才能继续执行A后面的程序,于是有了此文章。 请看代码: 首先定义一个接...
  • lishirong
  • lishirong
  • 2016年06月19日 14:57
  • 1155

Java callback-JAVA实现回调

所谓回调,就是客户程序C调用服务程序S中的某个函数SA,然后S又在某个时候反过来调用C中的某个函数CB,对于C来说,这个CB便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说...
  • wangtaomtk
  • wangtaomtk
  • 2016年08月18日 21:23
  • 969

理解Java回调机制

其实对于回调机制,在实际使用中还是经常用到的。但好笑的是,一直没能对所谓的回调的概念有一个很清晰的理解。 最近抽空看一些书的时候,老是时不时的提到回调的概念。那好吧,正好抽空来简单总结总结,加深一下印...
  • ghost_Programmer
  • ghost_Programmer
  • 2015年03月03日 16:07
  • 2988

Java接口回调技术

接口变量和回调机制 在java语言中,接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口...
  • qq_18149897
  • qq_18149897
  • 2015年11月26日 16:53
  • 1261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的回调学习
举报原因:
原因补充:

(最多只允许输入30个字)