spring ApplicationListener实现Observer观察者模式

标签: spring context event observer 模式
105人阅读 评论(0) 收藏 举报
分类:
什么是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> 

查看评论

XML和JSP的联手

编者按:此文由blueski翻译自javaworld 3/31/2000令我我想不到的是翻译这篇文章居然花费了我整个8小时的工作时间!也许有些细节地方理解或表达得不够好,但这篇译文的价值也在于它从总体...
  • terrywang
  • terrywang
  • 2000-12-24 12:13:00
  • 632

SpringMVC中的观察者模式

观察者接口Observer public interface Observer { public void execute(Map paras) throws ServerException...
  • u013807095
  • u013807095
  • 2015-01-12 08:49:54
  • 1440

用 spring 实现观察者设计模式

传统观察者设计模式编写方法:    发布者类:Publisher.java  import java.util.ArrayList;  import java.util.Iterator;  impo...
  • gzjoek
  • gzjoek
  • 2006-04-14 17:18:00
  • 3808

观察者模式和Spring的结合

这周给分了一个任务,就是对查询回来的数据进行各种各样的过滤,有七种不同的过滤条件。过滤条件是在数据库中存着的。在我们项目中有一个热发,就是定时的从数据库中把数据取出来进行分类保存到Property中或...
  • u010853701
  • u010853701
  • 2016-12-18 22:07:13
  • 2729

模式实践:观察者模式与Spring

    公司的项目告一段落,最近在进行RUP培训项目,有了些空闲的时间。闲暇浏览TheServerSide时,看到一篇名叫《Spring loaded Observer Pattern》的文章,不禁会...
  • ai92
  • ai92
  • 2005-10-28 20:16:00
  • 6645

用Spring提高java观察者模式灵活性

在上篇博客 用java观察者模式解耦经典三层架构 中,
  • xqf309
  • xqf309
  • 2014-07-28 17:51:02
  • 3637

观察者模式 (Listener监听器)

原文出自:http://blog.csdn.net/zhengzhb/article/details/7471978 定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所...
  • u010644448
  • u010644448
  • 2016-12-20 16:16:43
  • 613

观察者模式与事件监听机制

转自:http://www.cnblogs.com/aoguren/p/4680692.html 观察者模式与事件监听机制 一、观察者模式 1.1 概述 有时被称作发布/订阅模式,观察者...
  • qq_22873427
  • qq_22873427
  • 2017-08-14 20:52:34
  • 492

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

转载:http://www.zhengmenbb.com/archives/298.htm 侦听者类: Observer package com.zhengmenbb.spring.liste...
  • u010571844
  • u010571844
  • 2015-03-02 14:51:46
  • 1021

spring 容器启动-观察者模式

之前一篇文件简单的讲了一些spring容器的启动顺序以及父子容器,现在说的是一些有关spring容器启动时涉及的设计模式的思想-观察者模式 首先在web.xml文件中我们通过配置监听器来监听web容...
  • qq_27409289
  • qq_27409289
  • 2017-06-25 00:53:31
  • 246
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 2024
    排名: 2万+
    最新评论