标签:
ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext
事件处理。如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被
触发。
Spring的事件框架有如下两个重要的成员:
实际上,Spring的事件机制与所有时间机制都基本相似,它们都需要事件源、事件和事件监听器组成。只是此处的事件源是ApplicationContext,
且事件必须由Java程序显式触发。下面的程序将演示Spring容器的事件机制。程序先定义了一个ApplicationEvent类,其对象就是一个Spring容器事件。
代码如下:
public class EmailEvent extends ApplicationEvent{
private String address;
private String text;
public EmailEvent(Object source, String address, String text){
super(source);
this.address = address;
this.text = text;
}
public EmailEvent(Object source) {
super(source);
}
//......address和text的setter、getter
} 上面的EmailEvent类继承了ApplicationEvent类,除此之外,它就是一个普通的Java类。
容器事件的监听器类必须实现ApplicationListener接口,实现该接口就必须实现如下方法:
本例所使用的容器监听器类代码如下:
public class EmailNotifier implements ApplicationListener{
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof EmailEvent) {
EmailEvent emailEvent = (EmailEvent)event;
System.out.println("邮件地址:" + emailEvent.getAddress());
System.our.println("邮件内容:" + emailEvent.getText());
} else {
System.our.println("容器本身事件:" + event);
}
}
}将监听器配置在Spring的容器中,代码如下:
<bean class="com.abc.EmailNotifier" />为Spring容器注册监听器,不需要像AWT编程那样采用代码进行注册,只需要在Spring的配置文件中进行简单配置即可。当我们在
调用ApplicationContext的publishEvent()方法来主动触发一个容器事件,如下是一个例子:
public class SpringTest {
public static void main(String args[]){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//创建一个ApplicationEvent对象
EmailEvent event = new EmailEvent("hello","abc@163.com","This is a test");
//主动触发该事件
context.publishEvent(event);
}
}Spring提供如下几个内置事件:
原文出处: chenssy
【好文推荐】Spring中ApplicationContext的事件机制
标签:
原文地址:http://blog.csdn.net/mr_smile2014/article/details/52092452