Spring是如何加载Xml文件的

来源:互联网 发布:软件销售企业财务处理 编辑:程序博客网 时间:2024/05/22 09:00

Spring是如何加载Xml文件的

这是一个很有意思的话题,在我刚学习spring框架的时候是使用Junit测试配置的DataSource是否配置成功,那时候要写一段这样的代码来加载我们配置好的XML文件:

@Testpublic void loadXML(){    ApplicationContext factory = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");    factory.getBean("DataSource");}

当然我们现在很少使用这种方式手动去加载一个XML文件了,现在大部分的Spring项目大部分是使用SpringBoot了,减少了不少之前springMVC项目中各种繁杂的配置项,以后就是springBoot的天下了,当然这个另作一说了;

最近看了一些spring底层运行的书,对着一块也是有了更深入的了解,spring是如何加载properties文件和XML文件的;

核心实现代码

1.DefaultListableBeanFactory类

package org.springframework.beans.factory.support;下的
DefaultListableBeanFactory类是这是Spring注册及加载的核心部分,是spring注册及加载bean的默认的实现,而XmlBeanFactory是继承自DefaultListableBeanFactory他们的区别是XmlBeanFactory中有一个自己定义的xml读取器(using an XmlBeanDefinitionReader),而这个读取的方式是根据XML Document方式来实现的;

当然这就涉及到XML解析的两个方式:一种就是当前说到的这种XML Doucument的方式,解析的过程中是通过读取XML Doucument 这相当于XML文档的约定格式的规范;


上面的方法就是XmlBeanDefinitionReader中加载document的方法

还有一种方式是读取当前文档自己自带的结构格式规范,来解析XML文件,感兴趣的话可以自己下去查询一下;

2.XmlBeanDefinitionReader类

加载过程:

1.使用ResourceLoader将资源文件加载到对应的Resource

2.通过DocumentLoader对文件进行转换,将resource文件转换成document

3.通过实现的接口对Document进行解析,使用BeanDefinitionParserDelegate对Element进行解析

这是我在网上找的的XmlBeanFactory运行的时序图:

联系我们一开始写的那段代码,我们首先是调用了ClassPathResource的构造函数来构造Resouce文件的实例化,然后拿到Resuorce之后就可以进行XmlBeanFactory的初始化了;

原创粉丝点击