关闭

spring ApplicationListener实现Observer观察者模式

标签: springcontexteventobserver模式
62人阅读 评论(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> 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4576次
    • 积分:394
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:10篇
    • 译文:0篇
    • 评论:0条
    文章分类