`

Spring CallBack回调机制介绍

阅读更多

所谓回 调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下 的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓 甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函 数。Web Service以及Java 的RMI都用到回调机制,可以访问远程服务器程序。


而在spring当中大量使用了回调机制,我们不得不对内部的实现机制进行一定的了解与认识,我们先从简单点入手。

 

在现实生活当中常常会发生对一个男孩子来说,会存在着不同的女朋友,那么怎么样去更换他呢,基本可以通过回调来实现。

1 回调类接口

 

package com.japie.callback;

/**
 * 
 * @author Japie
 * 
 */
public interface IFindGirlFirendBack {
	public String findGirlFirendForBoyMan();
}
 


2 具体实现类

package com.japie.callback;

/**
 * 
 * @author Japie
 * 
 */
public class FindGirlFriendCallbackFunction implements IFindGirlFirendBack {

	/**
	 * 
	 */
	public FindGirlFriendCallbackFunction() {
	}

	public String findGirlFirendForBoyMan() {
		return "李四!";
	}

}
 


3 调用者

 

package com.japie.callback;

/**
 * 
 * @author Japie
 * 
 */
public class AnotherBoyman {

	IFindGirlFirendBack findGrilFirendBack;

	public String doGirlFriendCallback() {
		return findGrilFirendBack.findGirlFirendForBoyMan();
	}

	public void setCallback(IFindGirlFirendBack findGrilFirendBack) {
		this.findGrilFirendBack = findGrilFirendBack;
	}
}
 

4 具体实现回调测试

 

 

package com.japie.callback;

public class CallMainTest {

	public CallMainTest() {
	}

	public static void main(String[] args) {

		IFindGirlFirendBack first = new FindGirlFriendCallbackFunction();
		System.out.println("原先的女朋友:" + first.findGirlFirendForBoyMan());
		AnotherBoyman anotherBoyman = new AnotherBoyman();
		anotherBoyman.setCallback(new FindGirlFriendCallbackFunction() {
			@Override
			public String findGirlFirendForBoyMan() {
				return "张三";
			}
		});
		String girls = anotherBoyman.doGirlFriendCallback();
		System.out.println("此男孩的女朋友:" + girls);
	}

}
 


5 运行结果如下


原先的女朋友:李四!
此男孩的女朋友:张三

分享到:
评论
1 楼 HkEndless 2015-01-19  
不好意思,请问这确定是回调机制吗。你的例子中只是将接口的实现类作为一个引用传入AnotherBoyman ,通过内部匿名类的方式创建了一个新的对象而已。而AnotherBoyman与另外一个上层类IFindGirlFirendBack first = new FindGirlFriendCallbackFunction();  中的first并没有直接关系。我觉得这不是回调机制。

相关推荐

    oss文件上传(带回调)

    springboot + +oss + thymeleaf 实现的小demo , oss文件上传,根据oss链接生成二维码.

    JdbcTemplate教程

    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

    highstocks-sample:高库存图表

    渲染(imgOptions,chartOptions,回调) imgOptions对象。 渲染图像选项。 chartOptions对象。 常规 Highcharts 选项。 callback函数。 回调有参数(base64png) ,一个 base64 PNG 数据字符串。 示例用法 var ...

    DWR.xml配置文件说明书(含源码)

    Array的配置项目没有上面介绍的那么直观,默认情况下DWR装载所有的基本类型和可装载的对象,这些包括String,Date等先前介绍的类型.java高级程序员可能会理解为什么match的这行有点奇怪. [Z"/> [B"/> [S"/> [I"/> [J"/>...

    react-native-swipe-left:用于listView的RN向左滑动组件

    左边按钮的可配置化(可配置多按钮,文字/图片,背景色,宽度,回调) pressable in single row 单个row内的按钮或链接可点击 optional animation type, timing/spring 可选择滚动动画类型,timing/spring Ins

    CORS-Demo:直接从平台外服务的 JavaScript 访问 Force.com REST API

    在您的 Spring '15 组织中使用回调 URL https://your-app.herokuapp.com/oauth/_callback和api范围创建一个连接的应用程序。 等待 2-10 分钟,让连接的应用程序数据在 Salesforce 周围复制。 将演示代码部署到 ...

    ajax+springmvc实现C与View之间的数据交流方法

    callback:发送成功时回调函数。 type:返回内容格式,xml, html, script, json, text, _default。 套用格式: $.post(test.php, function(data){ alert(Data Loaded: + data); }); $.get(co

    DWR中文文档.pdf

    DWR中的JavaScript简介 44 5.1 简单的回调函数 44 5.2 调用元数据对象 45 5.3 查找回调函数 45 5.4 创造一个与Java对象匹配的Javascript对象 46 <br/>第6章. engine.js 功能 47 6.1 使用...

    单点登录源码

    [阿里云OSS](project-bootstrap/aliyun-oss-post-callback.png) > zheng-api 服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该...

    适用于Android的多点触摸变换手势检测器。-Android开发

    FreeformGestureDetector:...回调实现FreeformGestureDetector.OnGestureListener。 FreeformGestureDetector freeformGestureDetector = new FreeformGestureDetector(getContext(),callback); 连View的触感

    asp.net知识库

    Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0...

Global site tag (gtag.js) - Google Analytics