首先,Spring加载配置文件是在refresh#obtainFreshBeanFactory方法中进行的。
逻辑是在loadBeanDefinitions方法中进行的,Spring对loadBeanDefinitions方法做了很多重载。
在new ResourceEntityResolver(this)中
这里初始化了xsd/dtd的映射类,现在一般是使用xsd。
PluggableSchemaResolver#resolveEntity方法会读取META-INF/Spring.schemas文件,该文件配置的是kv数据,k是xsd的网络地址,v是本地地址,为了防止在未联网的情况下解析不了标签。
这里将配置文件路径传下去了,配置文件路径是在构造函数的setConfigLocations中赋值的
这里遍历了配置文件数组
在这里将配置文件路径转成了Resource[]对象
随后遍历Resource[]
在这里终于看到了真正干活的方法doLoadBeanDefinitions
doLoadDocument加载了配置文件主要看registerBeanDefinitions方法
doRegisterBeanDefinitions(Element root)
这里会去判断标签做相应处理
主要看一下Bean标签
parseBeanDefinitionElement(Element ele)
parseBeanDefinitionElement(
Element ele, String beanName, @Nullable BeanDefinition containingBean)
在这个方法中就是解析标签中的属性了,将BeanDefinition创建出来,把属性set到BeanDefinition中