Spring注解驱动开发第44讲——Spring IOC容器创建源码解析(四)之初始化MessageSource组件
发布日期:2021-06-30 17:56:29 浏览次数:3 分类:技术文章

本文共 1189 字,大约阅读时间需要 3 分钟。

目录一览

写在前面

在上一讲中,我们已经搞清楚了如下registerBeanPostProcessors方法所做的事情,它无非就是来注册BeanPostProcessor的。

在这里插入图片描述

然后,我们让程序运行到以上第531行代码(即initMessageSource方法)处。顾名思义,该方法是来初始化MessageSource组件的。对于Spring MVC而言,该方法主要是来做国际化功能的,如消息绑定、消息解析等。

接下来,我们就得来研究研究initMessageSource方法里面究竟做了些什么事了。

初始化MessageSource组件

获取BeanFactory

按下F5快捷键进入到initMessageSource方法里面,如下图所示,可以看到一开始是先来获取BeanFactory的。

在这里插入图片描述

而这个BeanFactory,我们之前早就准备好了。

看容器中是否有id为messageSource,类型是MessageSource的组件

按下F6快捷键让程序继续往下运行,会发现有一个判断,即判断BeanFactory中是否有一个id为messageSource的组件。我为什么会这么说呢,你只要看一下常量MESSAGE_SOURCE_BEAN_NAME的值就知道了,如下图所示,该常量的值就是messageSource。

在这里插入图片描述

若有,则赋值给this.messageSource

如果有的话,那么会从BeanFactory中获取到id为messageSource,类型是MessageSource的组件,并将其赋值给this.messageSource。这可以从下面这行代码看出。

在这里插入图片描述

很显然,容器刚开始创建的时候,肯定是还没有的,所以程序会来到下面的else语句中。

若没有,则创建一个DelegatingMessageSource类型的组件,并把创建好的组件注册在容器中

如果没有的话,那么Spring自己会创建一个DelegatingMessageSource类型的对象,即MessageSource类型的组件。

那么问题来了,这种MessageSource类型的组件有啥作用呢?我们不妨查看一下MessageSource接口的源码,如下图所示,它里面定义了很多重载的getMessage方法,该方法可以从配置文件(特别是国际化配置文件)中取出某一个key所对应的值。

在这里插入图片描述

也就是说,这种MessageSource类型的组件的作用一般是取出国际化配置文件中某个key所对应的值,而且还能按照区域信息获取哟~

紧接着,把创建好的MessageSource类型的组件注册到容器中,所执行的是下面这行代码。

在这里插入图片描述

那么,我们以后想获取国际化配置文件中的值的时候,就可以直接自动注入这个MessageSource类型的组件了,然后调用它的getMessage方法就行了,并且还能按照区域信息获取哟😁

转载地址:https://liayun.blog.csdn.net/article/details/114241404 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring注解驱动开发第45讲——Spring IOC容器创建源码解析(五)之初始化事件派发器
下一篇:Spring注解驱动开发第43讲——Spring IOC容器创建源码解析(三)之注册BeanPostProcessor

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月21日 06时06分22秒