spring ApplicationListener实现Observer观察者模式

原创 2017年07月17日 19:22:54
什么是ApplicationContext? 
它是spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 ApplicationContext则是应用的容器。
Spring把Bean(object)放在容器中,需要用就通过get方法取出来。


ApplicationEvent

是个抽象类,里面只有一个构造函数和一个长整型的timestamp。


ApplicationListener
是一个接口,里面只有一个onApplicationEvent方法。所以自己的类在实现该接口的时候,要实装该方法。

如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当在一个ApplicationEvent发布到 ApplicationContext时,这个bean得到通知。其实这就是标准的Oberver设计模式。


下面给出例子:

首先创建一个ApplicationEvent实现类:

  1. package com.spring.event;  
  2.   
  3. import org.springframework.context.ApplicationEvent;  
  4.   
  5. /**  
  6.  * <p>Class:EmailListEvent</p>  
  7.  * <p>Description:</p>  
  8.  * @author Liam  
  9.  * @Date [2012-9-7 上午8:42:07]  
  10.  */  
  11. public class EmailEvent extends ApplicationEvent {  
  12.     /**  
  13.      * <p>Description:</p>  
  14.      */  
  15.     private static final long serialVersionUID = 1L;  
  16.     public String address;    
  17.     public String text;  
  18.       
  19.     public EmailEvent(Object source) {  
  20.         super(source);  
  21.     }  
  22.       
  23.     public EmailEvent(Object source, String address, String text) {  
  24.         super(source);  
  25.         this.address = address;  
  26.         this.text = text;  
  27.     }  
  28.       
  29.     public void print(){  
  30.         System.out.println("hello spring event!");  
  31.     }  
  32.   
  33. }  
给出监听器:

  1. package com.spring.event;  
  2.   
  3. import org.springframework.context.ApplicationEvent;  
  4. import org.springframework.context.ApplicationListener;  
  5.   
  6. /**  
  7.  * <p>Class:EmailListener</p>  
  8.  * <p>Description:</p>  
  9.  * @author Liam  
  10.  * @Date [2012-9-7 上午8:44:53]  
  11.  */  
  12. public class EmailListener implements ApplicationListener {  
  13.   
  14.     public void onApplicationEvent(ApplicationEvent  event) {  
  15.         if(event instanceof EmailEvent){  
  16.             EmailEvent emailEvent = (EmailEvent)event;  
  17.             emailEvent.print();  
  18.             System.out.println("the source is:"+emailEvent.getSource());  
  19.             System.out.println("the address is:"+emailEvent.address);  
  20.             System.out.println("the email's context is:"+emailEvent.text);  
  21.         }  
  22.           
  23.     }  
  24.   
  25. }  

applicationContext.xml文件配置:

<bean id="emailListener" class="com.spring.event.EmailListener"></bean>

测试类:

  1. package com.spring.event;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. /**  
  7.  * <p>Class:Test</p>  
  8.  * <p>Description:</p>  
  9.  * @author Liam  
  10.  * @Date [2012-9-6 上午10:41:34]  
  11.  */  
  12. public class Test {  
  13.     public static void main(String[] args) {  
  14.         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");  
  15.           
  16.         //HelloBean hello = (HelloBean) context.getBean("helloBean");  
  17.         //hello.setApplicationContext(context);  
  18.         EmailEvent event = new EmailEvent("hello","boylmx@163.com","this is a email text!");  
  19.         context.publishEvent(event);  
  20.         //System.out.println();  
  21.     }  
  22. }  

测试结果: 

  1. <pre class="html" name="code">hello spring event!  
  2. the source is:hello  
  3. the address is:boylmx@163.com  
  4. the email's context is:this is a email text!  
  5. </pre>  
  6. <pre></pre> 

版权声明:本文为博主原创文章,未经博主允许不得转载。

利用Spring实现观察者模式(Oberver)

转载:http://www.zhengmenbb.com/archives/298.htm 侦听者类: Observer package com.zhengmenbb.spring.liste...
  • u010571844
  • u010571844
  • 2015年03月02日 14:51
  • 895

设计模式——观察者模式(Observer)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记,欢迎交流。 ——Shulin 转载请注明出处:http://blog.csdn.net/zhsh...
  • u012909091
  • u012909091
  • 2014年08月20日 16:52
  • 2947

Qt-观察者模式

1.观察者模式 Observer     首先根据字面意思肯定知道有  观察者 和 被观察者。 根据模式规定,这是一个一对多的依赖关系。 当被观察者更新状态,并且发出通知 观察者,观察者做...
  • c3060911030
  • c3060911030
  • 2016年07月17日 03:01
  • 3099

设计模式 - 观察者模式(Observer Pattern) 详解

观察者模式(Observer Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权...
  • u012515223
  • u012515223
  • 2014年05月22日 14:37
  • 2975

观察者模式之Scala实现

Head First Design Pattern 书中第二章讲解了”观察者”模式的用法, 书中实例(气象台)是java写的. 这里用scala实现一下, 其中差异还是挺明显的.scala一直强调:...
  • zrc199021
  • zrc199021
  • 2016年06月27日 16:24
  • 516

设计模式(行为型)之观察者模式(Observer Pattern)

观察者模式用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应...
  • yanbober
  • yanbober
  • 2015年05月04日 20:46
  • 5113

Spring ApplicationListener使用方法及问题

使用场景在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等。这个时候我们就可以使用Spring提供的ApplicationListener来进...
  • wo541075754
  • wo541075754
  • 2017年05月12日 13:48
  • 8303

nodejs 设计思想杂记 三 observer模式

观察者模式:一个对象,当其状态改变时能够通知一系列的观察者。 EventEmitter 看图说话 使用方法: var EventEmitter = require('events').Event...
  • oZuoQi
  • oZuoQi
  • 2016年07月06日 12:55
  • 821

设计模式-深入解析观察者模式(Observer)

在上篇设计模式上我们继续前进把,苦逼(酷毙)的程序员一刻都不能松懈的,要紧跟脚步,每天都学习啊!!学了策略模式,我自己去用设计模式写了几个例子,感觉还扣以啊。下面继续总结一下观察者模式的学习,如有不正...
  • qq_29282475
  • qq_29282475
  • 2015年12月07日 16:16
  • 1318

Android设计模式之观察者模式(Observer Pattern)

观察者模式介绍观察者模式是一个使用率非常高的模式,它最常用的地方就是GUI系统、订阅–发布系统。因为这个模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。...
  • happy_horse
  • happy_horse
  • 2016年05月30日 21:05
  • 1837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring ApplicationListener实现Observer观察者模式
举报原因:
原因补充:

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