目录
二、initApplicationEventMulticaster
一、initMessageSource
国际化相关:
protected void initMessageSource() {
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {
this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class);
// Make MessageSource aware of parent MessageSource.
if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) {
HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource;
if (hms.getParentMessageSource() == null) {
// Only set parent context as parent MessageSource if no parent MessageSource
// registered already.
hms.setParentMessageSource(getInternalParentMessageSource());
}
}
if (logger.isTraceEnabled()) {
logger.trace("Using MessageSource [" + this.messageSource + "]");
}
}
else {
// Use empty MessageSource to be able to accept getMessage calls.
DelegatingMessageSource dms = new DelegatingMessageSource();
dms.setParentMessageSource(getInternalParentMessageSource());
this.messageSource = dms;
beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);
if (logger.isTraceEnabled()) {
logger.trace("No '" + MESSAGE_SOURCE_BEAN_NAME + "' bean, using [" + this.messageSource + "]");
}
}
}
从BeanFactory中是否存在名称为messageSource的BeanDefinition或者Bean,一般没有则会初始化DelegatingMessageSource类型,并注册到BeanFactory中。
二、initApplicationEventMulticaster
初始化事件发送,详细可以参见Spring源码-事件监听机制(实现EventListener接口)
三、onRefresh
AbstractApplicationContext中为空方法,留给子类实现。
四、registerListeners
将所有硬编码方式,通过AbstractApplicationContext或子类的addApplicationListener方法,添加到容器中的监听器,添加的发送器SimpleApplicationEventMulticaster中(在initApplicationEventMulticaster中实现)。并且发送earlyApplicationEvents事件,但是一直不知道这是什么时候添加进去的。
其余后续进行详细分析更新。。。。。。