您的位置:首页 > 移动开发

Spring 的 ApplicationEvent and ApplicationListener

2014-08-01 17:47 585 查看
什么是ApplicationContext?


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

ApplicationContext则是应用的容器。

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

ApplicationEvent


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

ApplicationListener


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

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

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

那么每当在一个ApplicationEvent发布到 ApplicationContext时,

这个bean得到通知。其实这就是标准的Observer设计模式。


首先创建一个Event事件类:

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类:

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文件中:

<?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类:

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.
15. }

测试结果:

# Hello,Spring Event!!!
# the source is:hello
# the address is:helloSpring@sina.com
# the mail's context is :this is a test eamil content
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐