SpringBoot源码学习(六)
时间:2022-07-25
本文章向大家介绍SpringBoot源码学习(六),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
上期在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然后对其进行赋值操作。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 聊一聊Android中的StateListAnimator
- Linux KeyLogger
- [- Flutter 数据&状态篇 -] InheritedWidget
- Android实现图片一边的三角形边框效果
- Android使用SoundPool播放短音效
- 用Jquery做一个进度条
- Android SoundPool实现简短小音效
- [-Flutter趣玩篇-] 出神入化的Align
- Android应用禁止屏幕休眠的3种方法
- Flutter 实现下拉刷新上拉加载的示例代码
- [- C++趣玩篇1 -] 从打印开始说起
- Android实现蓝牙(BlueTooth)设备检测连接
- JQuery 入门学习(三)
- Android实现美团APP的底部滑动菜单
- 正则十八式-第二式:控鹤擒龙