博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring系列之 回调函数的使用
阅读量:4067 次
发布时间:2019-05-25

本文共 1865 字,大约阅读时间需要 6 分钟。

spring使用了大量的回调函数,如HibernateCallBack,打开你的eclipse,ctrl+shift+t,再输入*CallBack,你可以看到有多少地方在使用回调函数,下面分析一下大牛们为什么频繁使用这个CallBack函数。

废话少说,先来个例子说事儿。

 

  1. package com.lixuehui.callbacktest;  
  2.   
  3. public interface MySession {  
  4.  public Object createMyQuery();  
  5. }  
  6.   
  7.    
  8.   
  9. package com.lixuehui.callbacktest;  
  10.   
  11. public class MySessionImpl implements MySession{  
  12.  public Object createMyQuery(){  
  13.   return "Hello,World!";  
  14.  }  
  15. }  
  16.   
  17.    
  18.   
  19. package com.lixuehui.callbacktest;  
  20.   
  21. public interface MyHibernateCallBack {  
  22.  Object doInHibernate(MySession target);  
  23. }  
  24.   
  25.    
  26.   
  27. package com.lixuehui.callbacktest;  
  28.   
  29. abstract class MyTemplete{  
  30.  protected MySession createSession(){  
  31.   return new MySessionImpl();// 模拟创建一个session  
  32.  }  
  33.   
  34.  protected Object execute(MyHibernateCallBack callback){  
  35.   MySession mySession = createSession(); // 模拟创建一个session  
  36.   Object object = callback.doInHibernate(mySession);  
  37.   return object;  
  38.  }   
  39. }  
  40.   
  41. class TempClass implements MyHibernateCallBack {  
  42.  public Object doInHibernate(MySession session) {  
  43.   return session.createMyQuery();  
  44.  }  
  45. }  
  46.   
  47.   
  48. public class Test extends MyTemplete{  
  49.   
  50.  public static void main(String[] args) {  
  51.   Object object = new Test().execute(new MyHibernateCallBack(){  
  52.    //这处new这个接口,创建一个匿名内部类,相当于new了一个实现MyHibernateCallBack接口的类,然后再将这个匿   名对象传给execute方法。  
  53.    public Object doInHibernate(MySession session){  
  54.     return session.createMyQuery();  
  55.    }  
  56.   });  
  57.   System.out.println(object);  
  58.  }  
  59. }  
  60. //Test类相当于:  
  61. public class Test extends MyTemplete {  
  62.   
  63.  public static void main(String[] args){  
  64.   TempClass temp = new TempClass();  
  65.   Object object = new Test().execute(temp);  
  66.   System.out.println(object);  
  67.  }  
  68. }  

 

 不过这么写灵活度比较低,doInHibernate里的如果做另外的操作的话,就要重复修改TempClass的doInHibernate方法。
看到回调的好处了么?

 

我觉得这个回调的好处是:

通过创建匿名类,动态实现接口,并实现接口的方法,侧重点在于接口,不在乎实现接口的类,故采用匿名类。
如果你遇到了侧重点在于接口,而不在乎类实现的情况,就可以采取这种回调方式。

Oberser,swing的事件机制,以及java里的自定义事件机制,频繁用的都是回调. 

包括java里的main函数,也可以理解为回调 
那想想,为什么java *** 的时候就必须走main方法中呢,可见java ***的时候内部也是回调用的main,所以才跑到main方法里.main方法扔给二次开发人员,随意施展.

回调,回调,顾名思义:"你先实现吧,实现完了回头我调你".

转载地址:http://cjaji.baihongyu.com/

你可能感兴趣的文章
Android2.1消息应用(Messaging)源码学习笔记
查看>>
剑指offer算法题分析与整理(三)
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
QT打开项目提示no valid settings file could be found
查看>>
android 代码实现圆角
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
Visual Studio 2010:C++0x新特性
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>