Spring 的 ApplicationEvent and ApplicationListener .

什么是ApplicationContext?
它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。
ApplicationContext则是应用的容器。

Spring把Bean(object)放在容器中,需要用就通过get方法取出来。

ApplicationEvent

是个抽象类,里面只有一个构造函数和一个长整型的timestamp。

ApplicationListener

是一个接口,里面只有一个onApplicationEvent方法。

所以自己的类在实现该接口的时候,要实装该方法。

如果在上下文中部署一个实现了ApplicationListener接口的bean,

那么每当在一个ApplicationEvent发布到 ApplicationContext时,
这个bean得到通知。其实这就是标准的Observer设计模式。

首先创建一个Event事件类:

[java] view plaincopyprint?
01. 1. public class EmailListEvent extends ApplicationEvent {   
02. 2.    
03. 3.     private static final long serialVersionUID = 1L;   
04. 4.     public String address;   
05. 5.     public String text;   
06. 6.    
07. 7.     public EmailListEvent(Object source) {   
08. 8.         super(source);   
09. 9.     }   
10.10.    
11.11.     public EmailListEvent(Object source, String address, String text) {   
12.12.         super(source);   
13.13.         this.address = address;   
14.14.         this.text = text;   
15.15.     }   
16.16.    
17.17.     public void print() {   
18.18.         System.out.println("Hello,Spring Event!!!");   
19.19.     }   
20.20. }   
   1. public class EmailListEvent extends ApplicationEvent { 
   2.  
   3.     private static final long serialVersionUID = 1L; 
   4.     public String address; 
   5.     public String text; 
   6.  
   7.     public EmailListEvent(Object source) { 
   8.         super(source); 
   9.     } 
  10.  
  11.     public EmailListEvent(Object source, String address, String text) { 
  12.         super(source); 
  13.         this.address = address; 
  14.         this.text = text; 
  15.     } 
  16.  
  17.     public void print() { 
  18.         System.out.println("Hello,Spring Event!!!"); 
  19.     } 
  20. } 



其次创建一个ApplicationListener类:


[java] view plaincopyprint?
01. 1. public class EmailNotifier implements ApplicationListener {   
02. 2.    
03. 3.     public void onApplicationEvent(ApplicationEvent evt) {   
04. 4.         if (evt instanceof EmailListEvent) {   
05. 5.             EmailListEvent emailEvent = (EmailListEvent) evt;   
06. 6.             emailEvent.print();   
07. 7.             System.out.println("the source is:" + emailEvent.getSource());   
08. 8.             System.out.println("the address is:" + emailEvent.address);   
09. 9.             System.out.println("the mail's context is :" + emailEvent.text);   
10.10.         }   
11.11.    
12.12.     }   
13.13. }   
   1. public class EmailNotifier implements ApplicationListener { 
   2.  
   3.     public void onApplicationEvent(ApplicationEvent evt) { 
   4.         if (evt instanceof EmailListEvent) { 
   5.             EmailListEvent emailEvent = (EmailListEvent) evt; 
   6.             emailEvent.print(); 
   7.             System.out.println("the source is:" + emailEvent.getSource()); 
   8.             System.out.println("the address is:" + emailEvent.address); 
   9.             System.out.println("the mail's context is :" + emailEvent.text); 
  10.         } 
  11.  
  12.     } 
  13. } 





接着将Listener注册到Spring的xml文件中:


[html] view plaincopyprint?
01.<?xml version="1.0" encoding="UTF-8"?>   
02. <beans xmlns="http://www.springframework.org/schema/beans"   
03.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
04.          xmlns:aop="http://www.springframework.org/schema/aop"   
05.          xmlns:tx="http://www.springframework.org/schema/tx"   
06.          xsi:schemaLocation="http://www.springframework.org/schema/beans  
07.          http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
08.          http://www.springframework.org/schema/aop  
09.          http://www.springframework.org/schema/aop/spring-aop-2.0.xsd   
10.          http://www.springframework.org/schema/tx  
11.          http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">   
12.   
13.     <bean id="emailListListener" class="spring.event.EmailNotifier"></bean>   
14.       
15.</beans>   
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:aop="http://www.springframework.org/schema/aop" 
          xmlns:tx="http://www.springframework.org/schema/tx" 
          xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
          http://www.springframework.org/schema/aop
          http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 
 
     <bean id="emailListListener" class="spring.event.EmailNotifier"></bean> 
     
</beans> 



最后创建Demo类:


[java] view plaincopyprint?
01. 1. public class ListenerEventDemo {   
02. 2.    
03. 3.     /** 
04. 4.      * @param args 
05. 5.      */   
06. 6.     public static void main(String[] args) {   
07. 7.         ApplicationContext context = new ClassPathXmlApplicationContext(   
08. 8.                 "SpringEvent.xml");   
09. 9.         EmailListEvent emailListEvent = new EmailListEvent("hello",   
10.10.                 "[email protected]", "this is a test eamil content");   
11.11.         //在ApplicationContext中发布一个 ApplicationEvent    
12.12.         context.publishEvent(emailListEvent);   
13.13.     }   
14.14.    
15.15. }   
   1. public class ListenerEventDemo { 
   2.  
   3.     /**
   4.      * @param args
   5.      */ 
   6.     public static void main(String[] args) { 
   7.         ApplicationContext context = new ClassPathXmlApplicationContext( 
   8.                 "SpringEvent.xml"); 
   9.         EmailListEvent emailListEvent = new EmailListEvent("hello", 
  10.                 "[email protected]", "this is a test eamil content"); 
  11.         //在ApplicationContext中发布一个 ApplicationEvent 
  12.         context.publishEvent(emailListEvent); 
  13.     } 
  14.  
  15. } 



测试结果:


[plain] view plaincopyprint?
01.# Hello,Spring Event!!!   
02.# the source is:hello   
03.# the address is:[email protected]   
04.# the mail's context is :this is a test eamil content

猜你喜欢

转载自wangqiaowqo.iteye.com/blog/1896933