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> 

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

相关文章推荐

Observer观察者模式

  • 2012年09月20日 16:36
  • 6KB
  • 下载

observer观察者模式

  • 2017年01月19日 11:50
  • 1.17MB
  • 下载

C#中使用委托和事件实现观察者模式(observer pattern)

1.       Introduction:观察者设计模式描述了一个可依赖(observable)对象和其它一些对象(observers)的关系。它也叫做Model/View模式,依赖模式或者是传播/...

观察者模式(Observer Pattern)(三):使用java内置的支持实现HeadFirst气象站

一、问题描述 Weather-O-Rama气象站计划建立下一代的Internet气象观察站,该气象站必须建立在WeatherData对象的基础上,WeatherData对象提供天气数据,有三...

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

  • 2011年07月07日 09:36
  • 11KB
  • 下载

使用观察者模式Observer实现对Android网络状态的监听

在Android开发过程中,很多时候都会用到当前网络的状态判断以及网络状况发生变化的时候做出相应的反应,要想监听网络状态,用观察者模式再合适不过了,废话不多说,直接上代码。观察者模式属于面向对象的23...

Java 语言使用 Observer/Observable 实现简单的观察者模式

为了更好的理解什么是观察者模式,下面列举壹些可能用到该模式的情形或例子: (1)周期性任务。比如linux中的周期性任务命令crontab命令,win7 下的定时关机命令shutdown -s -t ...

观察者模式(Observer)的直观实现(小明旅游的故事)

最近一直在IBM开发者上找点资料学西设计模式的资料,前段时间也看了些关于设计模式的视频,但总感觉云里雾里(只怪功力太浅),今天下午又重新看了下设计模式中的Observer模式,网上的和开发者上讲这个模...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring ApplicationListener实现Observer观察者模式
举报原因:
原因补充:

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