博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Spring4揭秘 基础1】监听器和事件
阅读量:4290 次
发布时间:2019-05-27

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

一、基础

观察者模式

观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

观察者
(Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。
被观察
被观察对象发生了某种变化,从容器中得到所有注册过的观察者,将变化通知所有观察者,观察者们接收变化,如果对该变化感兴趣,那么 进行更新。
撤销观察
观察者告诉被观察者要撤销观察,被观察者从容器中将观察者去除。

事件模型

事件是可以被控件识别的操作,如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事,等等。

事件模型可以使用观察者模式实现:事件可以作为作为观察者模式中的 被观察对象的”变化” ,观察者接收所有事件,当对某个事件感兴趣时,做出变化。

二、Spring中的事件机制

ApplicationListener: 就是我们的 Observer,需要到容器中注册。他要关心他所关心的ApplicationEvent 。一般有如下代码:

if (event instanceof BlackListEvent) {}

ApplicationEventMulticaster:是我们的SUBJECT一个代理。他会管理我们的 ApplicationListener 。

ApplicationEvent: 是事件,它就是媒介,充当介质的作用。

使用ApplicationEventMulticaster 示例

下面程序中定义了两个监听器和两个事件,开始监听器只对开始事件作出相应,结束监听器对结束事件作出相应。

public class Tester {
public static void main(String[] args) { //构建广播器 ApplicationEventMulticaster multicaster = new SimpleApplicationEventMulticaster(); //添加开始监听器 multicaster.addApplicationListener(new MyStartListener()); //添加结束监听器 multicaster.addApplicationListener(new MyEndListener()); System.out.println("--1---"); multicaster.multicastEvent(new MyStartEvent(""));//广播开始事件 System.out.println("--2---"); multicaster.multicastEvent(new MyEndEvent(""));//广播结束事件 } public static class MyStartEvent extends ApplicationEvent {
public MyStartEvent(Object source) { super(source); } } public static class MyEndEvent extends ApplicationEvent {
public MyEndEvent(Object source) { super(source); } } public static class MyStartListener implements ApplicationListener {
@Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof MyStartEvent ) { System.out.println("程序开始运行Listener!"); } } } public static class MyEndListener implements ApplicationListener {
@Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof MyEndEvent) { System.out.println("程序结束运行...Listener"); } } }}

运行结果:

–1—

程序开始运行Listener!
–2—
程序结束运行…Listener
从这个小例子中可以看出Spring对广播事件是如何使用的。

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

你可能感兴趣的文章
netty源码分析之-ByteBuf详解(8)
查看>>
javascript函数定义三种方式详解
查看>>
javascript中this关键字详解
查看>>
javascript关于call与apply方法详解
查看>>
netty源码分析之-ReferenceCounted详解(9)
查看>>
javascript闭包详解
查看>>
javascript类的创建与实例对象
查看>>
javascript原型详解(1)
查看>>
netty源码分析之-处理器详解(9)
查看>>
javascript原型对象存在的问题(3)
查看>>
javascript原型继承(1)
查看>>
javascript原型继承-实现extjs底层继承(2)
查看>>
javascript设计模式-建立接口的方式(1)
查看>>
javascript设计模式-单体singleton模式(2)
查看>>
javascript设计模式-链式编程(3)
查看>>
大型高并发与高可用缓存架构总结
查看>>
javascript设计模式-工厂模式(4)
查看>>
javascript设计模式-组合模式(6)
查看>>
javascript设计模式-门面模式(7)
查看>>
javascript设计模式-享元模式(10)
查看>>