您的位置:首页 > 编程语言 > Java开发

Spring容器事件

2018-02-13 22:48 218 查看
事件体系有三个重要的概念

事件源:事件产生者

事件监听注册表:一个地方保存监听器

事件广播器:把消息发布给监听器

事件类

以下是已经有的事件,用户可以自定义事件

1. ApplicationContextEvent:容器事件,有四个子类(启动、刷新、停止、关闭)

2. RequestHandleEvent:web事件

监听器接口

ApplicationListener

事件广播

ApplicationEventMulticaster,默认使用SimpleApplicationEventMulticaster

具体实现

AbstractApplicationContext拥有一个applicationEventMulticaster成员变量,提供了注册表,refresh()中通过3步进行事件处理

//初始化事件广播,用户只要定义一个实现了ApplicationEventMulticaster接口的类即可,Spring通过反射找到并注册成容器事件广播器,
//默认使用SimpleApplicationEventMulticaster
initApplicationEventMulticaster()
//注册事件监听器 反射找到所有实现了ApplicationListener接口的Bean,并注册成监听器
//实际就是添加到事件广播器所提供的事件监听器注册表中
registerListeners()
//调用事件发布接口向容器所有监听器发布通知
finishRefresh()


例子

事件源,一个事件,比如发送短信事件

public class MessageSendEvent extends ApplicationContextEvent {

public MessageSendEvent(ApplicationContext source) {
super(source);
}
}


事件监听器 监听发送短信的事件

public class MessageSendListener implements ApplicationListener<MessageSendEvent>{

public void onApplicationEvent(MessageSendEvent event) {
MessageSendEvent mse = (MessageSendEvent) event;
System.out.println("发送短信");
}
}


广播器,发布消息

public class MailSender implements ApplicationContextAware {

private ApplicationContext ctx ;

public void setApplicationContext(ApplicationContext ctx)
throws BeansException {
this.ctx = ctx;

}
public void sendMail(String to){
MessageSendEvent mse = new MessageSendEvent(ctx);
ctx.publishEvent(mse);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: