spring之ApplicationEvent 事件驱动
什么是ApplicationContext?
它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。
ApplicationContext则是应用的容器。
Spring把Bean(object)放在容器中,需要用就通过get方法取出来。
ApplicationEvent
是个抽象类,里面只有一个构造函数和一个长整型的timestamp。
ApplicationListener
是一个接口,里面只有一个onApplicationEvent方法。
所以自己的类在实现该接口的时候,要实装该方法。
如果在上下文中部署一个实现了ApplicationListener接口的bean,
那么每当在一个ApplicationEvent发布到 ApplicationContext时,
这个bean得到通知。其实这就是标准的Observer设计模式
首先创建一个Event事件类
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类:
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. }
接着将Listener注册到Spring的xml文件中:
<?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>
MAIN
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. "helloSpring@sina.com", "this is a test eamil content"); 11. //在ApplicationContext中发布一个 ApplicationEvent 12. context.publishEvent(emailListEvent); 13. } 14.
测试结果:
# Hello,Spring Event!!!
# the source is:hello
# the address is:helloSpring@sina.com
# the mail's context is :this is a test eamil content