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的初始化了;
- Spring是如何加载Xml文件的
- Spring是如何加载XML文件中的标签的
- Tomcat是如何加载server.xml的
- spring 加载XML文件
- spring是如何加载bean的?
- spring的applicationContext.xml如何自动加载
- 动态加载spring的xml文件
- spring加载xml文件的方式
- spring的单元测试中的xml文件加载
- Android源码:xml文件是如何加载到屏幕上的(一)
- Android源码:xml文件是如何加载到屏幕上的(二)
- Nib文件是如何被加载的?
- 国际化资源文件是如何加载的?
- Activity是如何加载布局文件的?
- Spring 如何初始化一个容器,( 加载xml 文件 )
- spring 如何加载applicationContext.xml
- Spring中加载ApplicationContext.xml文件的方式
- Spring中加载ApplicationContext.xml文件的方式
- Linux文件管理
- 612. K个最近的点[LintCode]
- [uboot] uboot启动kernel篇(三)——uboot解析uImage的kernel信息
- vue使用图表类2 柱形图表
- 一道凑数问题
- Spring是如何加载Xml文件的
- Conllection之LinkedList源码简析
- 创建maven web项目 pom报错:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war
- BZOJ2588 主席树
- C语言实验——余弦
- 11月24号 Gson
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
- laravel5 列出所有事件 和事件实例
- jodd-html学习