SpringBoot源码学习(六)
程序员文章站
2022-06-01 13:41:46
...
上期在registerBeanPostProcessors方法中,我们发现spring将beanDefinitionMap中的bean的后置处理器全部按照顺序注册到了IOC中的BeanPostProcessor中。那么显然这块也是有顺序的。否则肯定会导致一些方法调用不到。而这里的后置处理器显然是在getBean方法中被调用的。这里我们先不探索getBean方法,我们还是先建立自己的逻辑大厦,这有助于我们更好的学习spring。
今天我们学习initMessageSource方法。
看到initMessageSource您能想到什么?我们知道在spring国际化中有个类叫做messageSource,那么个人觉得这个init就是国际化bean的初始化了。我们知道在国际化的初始化过程中我们只需要指定国际化配置的路径即可。那么这里的是否会有这样的逻辑?
protected void initMessageSource() {
//拿到beanFactory
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {
//如果已经包含了messageSource
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) {
//设置父的messageSource
hms.setParentMessageSource(getInternalParentMessageSource());
}
}
if (logger.isTraceEnabled()) {
logger.trace("Using MessageSource [" + this.messageSource + "]");
}
}
else {
//重新创建一个MessageSource并注册到容器中
DelegatingMessageSource dms = new DelegatingMessageSource();
dms.setParentMessageSource(getInternalParentMessageSource());
this.messageSource = dms;
//注册一个单例的messageBean
beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);
if (logger.isTraceEnabled()) {
logger.trace("No '" + MESSAGE_SOURCE_BEAN_NAME + "' bean, using [" + this.messageSource + "]");
}
}
}
通过查看源代码,发现messageSource其实就是springIOC的一个局部变量。但是到目前为止我们并没有将messageSoruce的初始化方法找到,我们知道在message中需要添加很多实例,然后才能处理国际化问题。但目前为止我们还没有找到相关的类。但是我们看到这里直接将messageSource初始化并注册进去了。那么显然会在之后的操作中获取这个MessageSoruce然后对其进行赋值操作。
上一篇: rnnlm源码分析 六
推荐阅读
-
springboot windows10风格 activiti 整合项目框架源码 shiro 安全框架 druid
-
JDK源码学习笔记——HashMap
-
php入门学习知识点六 PHP文件的读写操作代码
-
【前端语言学习】学习minipack源码,了解打包工具的工作原理-个人文章-SegmentFault思否
-
关于jQuery的源码学习
-
javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful
-
原创001 | 搭上SpringBoot自动注入源码分析专车
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
-
PHP网页游戏学习之Xnova(ogame)源码解读(九)