文章目录
- 1. initMessageSource();
- 2.initApplicationEventMulticaster()
- 3. 观察者模式
- 4.具体代码分析
-
- 4.1 类结构继承图
- 4.2 关键类
- 4.3 如何注册监听器
- 4.4 如何发布事件
-
- 4.4.1 multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType)
- 4.4.2 getApplicationListeners(ApplicationEvent event, ResolvableType eventType)
- 4.4.3 retrieveApplicationListeners(ResolvableType eventType, @Nullable Class<?> sourceType, @Nullable ListenerRetriever retriever)
- 4.4.4 事件如何驱动
- 5. registerListeners();
1. initMessageSource();
方法很简单:beanFactory有没有bean,有就再设置bean的ParentMessageSource;没有就创建MessageSource,并且注册到beanFactory。
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