• Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法


    什么是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
  • 相关阅读:
    栈的理解(出、入栈)
    javascript实现可以拖动的层示例(层拖动,兼容IE/FF)
    C# 队列 堆栈
    从0开始做Windows Phone 7开发
    C#写系统日志
    一位软件工程师的6年总结
    向Android模拟器发短信打电话
    office2010激活方法
    常用正则表达式
    JaveScript获得鼠标位置
  • 原文地址:https://www.cnblogs.com/lidj/p/7194161.html
Copyright © 2020-2023  润新知