当前位置:   article > 正文

一步一步带你深入源码看Spring是如何加载XML配置文件的_spring 加载xml

spring 加载xml

Spring 的在实际开发过程中都是以XML 配置文件+注解的形式进行使用,那么XML配置文件的读取是Spring中重要的功能,

在Spring中,加载XML配置文件的语句如下:
在这里插入图片描述
使用ClassPathXmlApplicationContext类的构造函数加载XML配置文件,代码如下:
在这里插入图片描述
ClassPathXmlApplicationContext()方法调用的是继承类的setConfigLocations()方法初始化配置文件XML的位置.代码如下:
在这里插入图片描述

在这里插入图片描述
AbstractRefreshableConfigApplicationContext.setConfigLocations()方法对XML配置文件路径进行了设置并放到全局变量String数组中保存.

在对XML配置文件加载完成后,会进行调用AbstractApplicationContext.refresh()方法加载或刷新持久化的配置信息.代码如下:
在这里插入图片描述
从代码中可以看到,方法调用obtainFreshBeanFactory() 告诉子类刷新内部bean工厂, 此方法主要实现三件事,第一:创建beanFactory共产, 第二: 解析xml文件生成beanDefinition对象, 第三:注册到beanDefinitionRegistry中,obtainFreshBeanFactory()代码如下:
在这里插入图片描述

obtainFreshBeanFactory()中调用AbstractRefreshableApplicationContext.refreshBeanFactory()方法实现上下文底层bean工厂的刷新,如果有旧的bean工厂则关闭,并为上下文阶段初始新的bean工厂,具体代码如下:
在这里插入图片描述

refreshBeanFactory()方法调用了AbstractXmlApplicationContext.loadBeanDefinitions()方法加载bean定义,具体代码如下:
在这里插入图片描述
loadBeanDefinitions()方法调用loadBeanDefinitions()方法用于加载或注册bean definitions,具体代码如下

在这里插入图片描述
对多个XML文件进行循环解析,调用loadBeanDefinitions()方法进行解析:
在这里插入图片描述
loadBeanDefinitions()方法调用重载的方法从自定位置加载BeanDefinition,前提是这个bean定义读取器的ResourceLoader是一个ResourcePatternResolver。具体代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
loadBeanDefinitions()方法调用了XmlBeanDefinitionReader.loadBeanDefinitions() 从特定的XML配置文件加载bean definitions.具体代码如下:
在这里插入图片描述
重载loadBeanDefinitions()方法
在这里插入图片描述
在这里插入图片描述
解析为document对象,之后就要注册beanDefinition了,在spring的加载过程中,BeanDefinition是一个重要的数据结构,它是在创建对象之前,对象数据的一种存在形式

xml —— beanDefinition ——bean 从xml配置bean ,到解析xml创建 beanDefinition , 到从beanDefinition实例为 bean对象,这是一个流程。

docoment对象的解析过程委托给了BeanDefinitionDocumentReader对象来完成:
在这里插入图片描述
DefaultBeanDefinitionDocumentReader.registerBeanDefinitions()方法
在这里插入图片描述
委托给document的解析器,入参为document的根元素,就是spring-context.xml的beans元素:
在这里插入图片描述
在这里插入图片描述
到此为止,XML配置文件就加载完成了,

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/90480
推荐阅读
相关标签
  

闽ICP备14008679号