Spring加载XML的过程

首先,Spring加载配置文件是在refresh#obtainFreshBeanFactory方法中进行的。


image.png

image.png

image.png

逻辑是在loadBeanDefinitions方法中进行的,Spring对loadBeanDefinitions方法做了很多重载。


image.png

在new ResourceEntityResolver(this)中

image.png

image.png

这里初始化了xsd/dtd的映射类,现在一般是使用xsd。
PluggableSchemaResolver#resolveEntity方法会读取META-INF/Spring.schemas文件,该文件配置的是kv数据,k是xsd的网络地址,v是本地地址,为了防止在未联网的情况下解析不了标签。

下一个loadBeanDefinitions(XmlBeanDefinitionReader reader)方法
image.png

这里将配置文件路径传下去了,配置文件路径是在构造函数的setConfigLocations中赋值的
image.png

这里遍历了配置文件数组


image.png

在这里将配置文件路径转成了Resource[]对象
image.png

随后遍历Resource[]
image.png

image.png

image.png

在这里终于看到了真正干活的方法doLoadBeanDefinitions
image.png

doLoadDocument加载了配置文件主要看registerBeanDefinitions方法


image.png

image.png

doRegisterBeanDefinitions(Element root)
image.png

image.png

image.png

这里会去判断标签做相应处理
主要看一下Bean标签
image.png

parseBeanDefinitionElement(Element ele)
image.png
image.png

parseBeanDefinitionElement(
Element ele, String beanName, @Nullable BeanDefinition containingBean)



在这个方法中就是解析标签中的属性了,将BeanDefinition创建出来,把属性set到BeanDefinition中

你可能感兴趣的:(Spring加载XML的过程)