Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法

壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法相关的知识,希望能为你提供帮助。
什么是ApplicationContext? 
它是spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 
ApplicationContext则是应用的容器。
Spring把Bean(object)放在容器中,需要用就通过get方法取出来。
 
ApplicationEvent
是个抽象类,里面只有一个构造函数和一个长整型的timestamp。

ApplicationListener
是一个接口,里面只有一个onApplicationEvent方法。
所以自己的类在实现该接口的时候,要实装该方法。
 
如果在上下文中部署一个实现了ApplicationListener接口的bean,
那么每当在一个ApplicationEvent发布到 ApplicationContext时,
这个bean得到通知。其实这就是标准的Oberver设计模式。
下面给出例子:
【Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法】首先创建一个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","[email  protected]","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:[email  protected]   
    4. the  email‘s  context  is:this  is  a  email  text!   
    5. < /pre>    
    6. < pre> < /pre>  

    推荐阅读