- 浏览: 336685 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
alafqq:
很好的一篇启蒙hashmap的文章;HASHTABLE的93行 ...
使用数组和链表实现hash表存储信息 -
小帅1127:
我擦,我还以为有什么大坑呢,这也写出来。。。
if..else if和if..if的区别 -
fncj:
转下http://www.dodoer.com
hadoop单机版搭建图文详解 -
yueshang520:
Spring注解原理的详细剖析与实现 -
fncj:
转下,谢谢http://www.whohelpme.com/b ...
Spring注解原理的详细剖析与实现
Java的接口支持提供了一种获得回调的等价功能的机制。其技巧是:定义一个简单的接口,并在该接口中声明我们要调用的方法。其特点是:一个实例持有一个接口的引用 例如,假设我们希望在某个时间发生时得到通知。我们可以定义一个接口:
这使得我们可以控制实现该接口的类得任何对象。因此,我们不必关心任何外部类型信息。发出事件信号的类必须等待实现了InterestingEvent接口的对象,并在适当时候调用interestingEvent()方法。
在EventNotifier中,使用somethingHappend谓词来跟踪是否哦应触发事件。在许多情况下,调用此方法足以保证向interesthingEvent()发出信号。 希望接受事件通知的代码必须实现Interestingevent接口,并将自身引用传递给事件通知程序。
下面是一个典型的回调案例:公司员工工作,工作完成后主管要求员工汇报工作完成情况。 事件接口:
事件具体实现类: 主管类: 员工类: 测试类: 测试结果: 可以看到,当员工完成工作时(即触发某事件时),staff对象调用boss对象的方法,实现回调功能。设计模式中,观察者模式也是一个典型的应用回调机制的例子。 package com.wxy.callback;
public interface InterestingEvent {
/**
*这是一个常规方法,如果需要,可以有返回值,也可以接受参数
*/
public void interestingEvent();
}
package com.wxy.callback;
public class EventNotifier {
/**事件对象*/
private InterestingEvent ie;
/**事件发生状态*/
private boolean somethingHappend;
/**
* 构造函数,传入事件对象以备后用
* @param event 事件对象
*/
public EventNotifier(InterestingEvent event) {
this.ie = event;
//事件未发生状态
somethingHappend = false;
}
/**
* 事件发生,调用InterestingEvent事件发生对象的方法发出事件信号
*/
public void doWork() {
//检查在别处设置的谓词
if (somethingHappend) {
//通过调用接口的这个方法发出事件信号
ie.interestingEvent();
}
}
}
public class CallMe implements InterestingEvent {
private EventNotifier en;
/**
* 创建事件通知程序,并将自身引用传递给它
*/
public CallMe() {
this.en = new EventNotifier(this);
}
/**
* 为事件定义实际的处理程序
*/
@Override
public void interestingEvent() {
System.out.println("oh,something interesting has happended!");
System.out.println("do some action!");
}
public EventNotifier getEn() {
return en;
}
public void setEn(EventNotifier en) {
this.en = en;
}
}
package com.wxy.callback;
public interface Event {
/**
* 返回发生事件信息
* @return 事件信息
*/
public String happendEvent();
}
package com.wxy.callback;
public class EventA implements Event {
@Override
public String happendEvent() {
return "job has been finished!";
}
}
package com.wxy.callback;
public class EventB implements Event {
@Override
public String happendEvent() {
return "job has been finished!";
}
}
package com.wxy.callback;
public class Boss {
private String name;
public Boss(String name) {
this.name = name;
}
public void getStaffEvent(Staff staff, Event event) {
System.out.println("the msg what the boss received is--" + staff.getName() + ":"
+ event.happendEvent());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.wxy.callback;
public class Staff {
private Event event; //事件
private String name; //员工姓名
private Boss boss; //员工所属主管
/**
* 员工构造器
* @param name 员工姓名
* @param boss 传入Boss对象,便于回调反馈工作状况
*/
public Staff(String name, Boss boss) {
this.name = name;
this.boss = boss;
}
public void doWork() {
System.out.println(name + " is doing working...");
//do somtething.....
for (int i = 0; i < 10; i++) {
System.out.println("sheep" + i);
}
System.out.println(name + " was finished work!");
//tell the boss what has happend,这里就是boss的回调方法
boss.getStaffEvent(this, event);
}
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boss getBoss() {
return boss;
}
public void setBoss(Boss boss) {
this.boss = boss;
}
}
package com.wxy.callback;
public class StaffBossTest {
public static void main(String args[]) {
//初始化员工和主管
Boss boss = new Boss("boss");
Staff staffA = new Staff("staffA", boss);
Staff staffB = new Staff("staffB", boss);
//主管发放了两个新任务
Event event1 = new EventA();
Event event2 = new EventB();
//员工接受任务开始干活
staffA.setEvent(event1);
staffB.setEvent(event2);
//员工干晚活,及时向主管反馈工作情况
staffA.doWork();
staffB.doWork();
}
}
staffA was finished work!
the msg what the boss received is--staffA:job has been finished!
staffB is doing working...
sheep0
sheep1
sheep2
sheep3
sheep4
sheep5
sheep6
sheep7
sheep8
sheep9
staffB was finished work!
the msg what the boss received is--staffB:job has been finished!
评论
}
发表评论
-
apache日志信息详解
2011-11-06 21:19 6269一、访问日志的格式 Apache内建了记录服务器 ... -
使用CGLIB实现AOP功能与AOP概念解释 .
2011-08-19 10:30 1328第三方创建代理对象的框架cglib,目标类可以不实现接口 ... -
浏览器如何工作
2011-08-19 08:57 0http://taligarsiel.com/Projects ... -
编码实现用JDK中的Proxy实现springAOP功能
2011-08-18 15:04 742http://blog.csdn.net/iamtheevil ... -
Spring注解原理的详细剖析与实现
2011-08-14 23:09 84233本文主要分为三部分: ... -
Spring装配基本属性的原理分析与代码实现
2011-08-11 15:37 1418首先,做一个配置属性的基本测试。修改beans.xml,使引用 ... -
编码剖析Spring依赖注入的原理
2011-08-10 20:01 1812一、注入依赖对象 基本类型对象注入: <b ... -
Spring的三种实例化Bean的方法
2011-08-10 14:03 1Spring的三种实例化Bean的方法 1、 使用 ... -
Spring管理bean的原理自定义实现
2011-08-10 10:44 61851、Spring通过BeanDefinition管理基于S ... -
spring环境搭建与测试
2011-08-10 08:40 3406Chapter1、搭建与测试spring的环境 1、 ... -
log4j的使用与详细分析
2011-08-05 13:32 2624一、什么是log4j? http://logging.a ... -
log4j使用详解
2011-08-04 23:05 2http://logging.apache.org/log4j ... -
spring入门及Demo
2011-07-29 16:01 0一、Spring是什么? Spring是一个开源框架,它 ... -
山寨Hibernate
2011-04-09 23:32 0---------------------------- ... -
观察者模式
2011-04-09 00:35 1105基本简介: 观察者模式(也称为发布/订阅模式:Publi ... -
Abstract Factory
2011-04-07 22:46 1102ABSTRACT FACTORY(抽象工厂) --对象创建型模 ... -
MVC模式分析与实现
2011-04-02 00:11 34661、 什么是模式? 模式描述了一个出现在特定设计环境中 ... -
java解析XML的四种方法的学习与比较
2011-03-30 20:55 7228四种XML解析方法: ... -
自定义日志模块实现
2011-03-30 09:58 1101package wxy.XXXX.Utils; impo ... -
synchronized(this)
2011-03-29 09:17 69361、当两个并发线程访问同一个对象object中的这个synch ...
相关推荐
前几天看了一下Spring的部分源码,发现回调机制被大量使用,觉得有必要把Java回调机制的理解归纳总结一下,以方便在研究类似于Spring源码这样的代码时能更加得心应手。 注:本文不想扯很多拗口的话来充场面,我的...
下面使用java回调函数来实现一个测试函数运行时间的工具类:如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的方法,进行了一个比较耗时的...
在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。 熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...
主要介绍了Java按时间梯度实现异步回调接口,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
本文主要介绍Java的回调机制,并附实例代码以供大家参考学习,有需要的小伙伴可以看下
接口回调是多态的另一种体现。... 现在有两个类,一个是A,一个是B,回调是A去调用B中的某个方法,然后B又回调A中的某个方法,这个方法是回调方法,回调的机制是与接口分不开的。 也是A类实现一个接口,并实
java回调机制: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。 >同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用; >回 调:一种...
1.概述 软件模块之间总是存在着一定的接口,从... 回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知 所谓回调,是客户程序CLIENT调用服务程序SERVER中的某个函数
2.1 在回调模式下验证服务器接口地址 2.2 检验消息的真实性,并且获取解密后的明文. 2.3 将公众平台回复用户的消息加密打包. 2.4 获取AccessToken 2.5 获取网页授权access_token 2.6 获取临时素材文件(不包括视频)...
但这种风格下又会导致上游组件并不能快速对下游组件的结果做出反馈,所以通常情况下可以采用AOP切面、函数式回调、委托对象、或者利用传址引用的特性来构建统一上下文的方式来解决。 所以EventBus的实现目标是: 1、...
3. 超级灵活的回调机制,不需要耦合任何业务逻辑就可以在任何项目中集成 ## 快速集成思路 flowable官方提供了rest-api包,本项目已经集成,可以直接由第三方调用。 我们为此开发一个轻量级的SDK,通过声明式快速...
impRecall.java 实现回调函数 inheritConstruct_1.java 构造器继承示例1 inheritConstruct_2.java 构造器继承示例2 inheritConstruct_3.java 构造器继承示例3 inheritConstruct_4.java 构造器继承示例4 ...
解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承、封装、多态的实现原理 容器 Java集合类总结 Java集合详解1:一文...
解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承封装多态的实现原理 集合类 Java集合类总结 Java集合详解:一文读...
本书明确而详尽地阐述了Java平台安全性,探究了Java安全结构的内幕。本书首先概述了计算机和网络安全概念并解释了Java安全模型,并...8.3.4 回调 147 8.3.5 访问控制 147 8.3.6 JAAS工具 149 8.4 小结 149 参考文献 151
目目目录 前言 第1章 计算机与网络安全基础 1 ...1.2 危险和保护 2 1.3 外围防护 3 1.3.1 防火墙 4 1.3.2 仅仅使用外围防护的不足之处...8.3.4 回调 147 8.3.5 访问控制 147 8.3.6 JAAS工具 149 8.4 小结 149 参考文献 151
Java调用分为3种:同步调用,同步回调,异步回调 1.同步调用及平时常用的调用方式 2.回调在框架中使用较多,例如spring 的 AOP实现,servlet的拦截器实现 场景 老师布置完作业后提供一个回调方法,学生可以...
6.7.6 闭包(Closure)和回调 215 6.8 枚举类 217 6.8.1 手动实现枚举类 217 6.8.2 枚举类入门 219 6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象方法的枚举类 224 6.9 ...
4 13 3接口回调 4 13 4接口做参数 4 14内部类 4 15匿名类 4 15 1和类有关的匿名类 4 15 2和接口有关的匿名类 4 16异常类 4 16 1try catch语句 4 16 2自定义异常类 4 17Class类 4 17 1获取类的有关信息 4 17 2使用...