首先,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是本地地址,为了防止在未联网的情况下解析不了标签。
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中