源码分析
先看代码:
protected void initApplicationEventMulticaster() {
//获取bean工厂
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
//当前是否包含了名为applicationEventMulticaster的事件多播器bean注入
if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {
//若存在,则实例化该多播器,并赋值给applicationEventMulticaster变量
this.applicationEventMulticaster =
beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);
if (logger.isTraceEnabled()) {
logger.trace("Using ApplicationEventMulticaster [" + this.applicationEventMulticaster + "]");
}
}
else {
//若不存在,构造一个SimpleApplicationEventMulticaster多播器对象,并赋值给applicationEventMulticaster 变量
this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
//将该对象注入bean工厂
beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);
if (logger.isTraceEnabled()) {
logger.trace("No '" + APPLICATION_EVENT_MULTICASTER_BEAN_NAME + "' bean, using " +
"[" + this.applicationEventMulticaster.getClass().getSimpleName() + "]");
}
}
}
分析代码,执行逻辑很简单:先看有没有给上下文注入事件多播器,若有,则实例化后赋值给bean工厂的变量,若没有,则自己构造一个,再赋值给变量,同时作为bean注入bean工厂。
代码的执行逻辑很简单,但是ApplicationEventMulticaster是做什么的呢?
此处的多播器单独的作用不大,他需要与下述中的监听器,构成观察者模式,监听整个过程的触发的事件;