码迷,mamicode.com
首页 > 移动开发 > 详细

Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法

时间:2017-07-17 15:19:21      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:desc   imp   art   通知   val   监听器   class   -name   理解   

什么是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. 测试结果:  
    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 的监听事件 ApplicationListener 和 ApplicationEvent 用法

标签:desc   imp   art   通知   val   监听器   class   -name   理解   

原文地址:http://www.cnblogs.com/lidj/p/7194161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!