首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

学透之IoC篇 - BeanDefinition 的加载阶段(XML 文件)

,接下来会先分析面向资源(XML、Properties)这种方式 Spring 是如何处理的 下来熟悉一段代码: dependency-lookup-context.xml: <?...如果已存在,抛出异常,防止循环加载同一资源出现死循环 throw new BeanDefinitionStoreException( "Detected...DTD 是一种保证 XML 文档格式正确的有效验证方式,它定义了相关 XML 文档的元素、属性、排列方式、元素的内容类型以及元素的层次结构。...DTD 文档 DTD 对元素的类型限制较少;同时其他的约束力也比较弱 DTD 扩展能力较差 基于正则表达式的 DTD 文档的描述能力有限 XSD(XML Schemas Definition),即 XML...XML Schema 本身就是一个 XML 文档,使用的是 XML 语法,因此可以很方便的解析 XSD 文档

60110
您找到你想要的搜索结果了吗?
是的
没有找到

Spring是如何解析XML并组装BeanDefinition存入BeanDefinitionMap的?

xsd规范校验 创建文档构建器 使用jaxp解析器解析xml并返回Document对象 //DefaultDocumentLoader.class @Override public Document loadDocument...并返回Document对象 return builder.parse(inputSource); } 至此,xml已经解析完成,下面就是文档对象中取出bean相关的数据并组装成BeanDefinition...存入BeanDefinitionMap中 小总结 简单来说,解析xml其实就是调用jaxp的api进行解析,解析完成后返回一个文档对象,然后根据规则来取出数据并组装,就这么简单。...beanName); } else if (isConfigurationFrozen()) { clearByTypeCache(); } } 至此,我们就完成了文档对象中取出...BeanDefinition 发布注册事件 最后总结 基本上就以下几点 使用jaxp 解析器来解析xml,返回Document对象(ps:不知道jaxp解析器的可自行百度了解一下) 解析文档对象组装BeanDefintionHolder

22310

Spring读源码系列01---Spring核心类及关联性介绍

Resource 进入源码追踪 XmlBeanFactory的构造函数 loadBeanDefinitions---加载Bean doLoadBeanDefinitions---真正将bean的定义信息xml...isOpen() { return false; } default boolean isFile() { return false; } URL...Loaded " + count + " bean definitions from " + resource); } return count; }....全都是catch--当然这里抛出的异常也非常重要...: 拿到XML文档的类型,是DTD还是XSD 如果不清楚啥是DTD和XSD可以自行了解一下,这里感兴趣可以去自己翻阅源码看一下大概的思路 使用XML解析器对xml文档进行解析,这里感兴趣的小伙伴可以自行去了解一下解析过程...,不感星球的小伙伴,只需要知道这里会读取xml文档,并按照xml解析方法将xml文件解析映射到Document对象上 ---- ---- registerBeanDefinitions—解析并注册

31120

是谁去读取 BeanDefinition 的?

BeanDefinitionReader 这是一个接口,名字上就能看出来专门用来读取 BeanDefinition,接口如下: public interface BeanDefinitionReader...beanName,这个松哥在最近录制的 Spring 源码分析视频中已经详细分析过了,这里就不再啰嗦了。...文件,首先会尝试将当前的要解析的 encodedResource 加入到 currentResources 集合中,如果加不进去,说明当前的 encodedResource 正在处理中,那么就抛出异常...Document 就是 XML 解析获取到的文档对象,Document 对象代表了一个 XML 文档的模型树,所有的其他 Node 都以一定的顺序包含在 Document 对象之内,排列成一个树状结构...,以后对 XML 文档的所有操作都与解析器无关,直接在这个 Document 对象上进行操作即可。

15340

深入理解Spring源码(一)-IOC容器的定位,载入,注册

(Reported by Dustin Woods.) // 为了避免应用程序在WebLogic 8.1关闭出现类异常加载问题,加载IOC容器关闭时间(ContextClosedEvent...资源文件,启用Xml的校验机制 initBeanDefinitionReader(beanDefinitionReader); // Bean 读取器真正实现加载的方法...对AbstractBeanDefinitionReader的loadBeanDefinitions方法源码分析可以看出该方法做了一下两件事 首先,调用资源加载器的获取资源方法resourceLoader.getResource...... // 如果URL方式,使用UrlResource作为bean文件的资源对象 URL url = new URL(location)...解析载入的Bean定义资源文件 XmlBeanDefinitionReader类中的doLoadBeanDefinitions方法是特定的XML文件中实际载入bean定义资源的方法,该方法在载入bean

1.5K20

Spring源码剖析3:Spring IOC容器的加载过程

进行xml 件的读取,每个堆栈中读取程序的运行信息 4.注意:由于Spring的类继承体系比较复杂,不能全部贴图,所以只将分析源码之后发现的最主要的类继承结构类图贴在下方。...首先是BeanDefinitionReader,将XML文件读取成w3c的Document文档。...bean.xml的处理 ---- 整体上介绍完了流程,接下来就重点看obtainFreshBeanFactory()方法,上文说到,在这个方法里,完成了配置文件的加载、解析、注册 protected..."Unexpected exception parsing XML document from " + resource, ex); } } 抛开异常处理:核心代码如下: Document...文档),BeanDefinitionDocumentReader(依赖xml文档,进行解析和注册),BeanDefinitionParserDelegate(实际的解析工作)。

68710

Spring解密 - XML解析 与 Bean注册

前言 由于记录的是 Spring源码分析的过程,详细用法就不一一赘述了 核心代码 org.springframework...那么 Spring 在获取属性 A ,如果发现属性 B 未实例化则会自动实例化属性 B,这也是 Spring中提供的一个重要特性,在某些情况下 B 不会被初始化,比如实现了 BeanNameAware...资源管理 通过 Resource 接口来实现对 File、URL、Classpath 等资源的管理, Resource 负责对配置文件进行读取,即将配置文件封装为 Resource,然后交给 XmlBeanDefinitionReader...跟踪 reader.loadBeanDefinitions(resource);,我们可以见到如下 核心代码(剔除注释和抛出异常) public int loadBeanDefinitions(EncodedResource...也就是说,对于解析一个 xml,sax 首先会读取该 xml 文档上的声明,根据声明去寻找相应的 DTD 定义,以便对文档的进行验证,默认的寻找规则,(即:网络下载,通过 XML 声明的 DTD URI

68430

深入理解-Spring-之源码剖析IOC(一)

这是维基百科的说法,楼主按照自己的思路分析一下IOC,楼主认为,分析一个问题,或者说证明一个事情,有2种方法,一是正向验证,即按照该事物的逻辑去验证正确性,还有一种是反向验证,证明该事物是否正确。...release 版本至今已经到了 5.0.3,和最初的 interface21 已经有了翻天复地的变化,现在也有了springboot, springcloud,俨然一个庞大的spring家族,想分析源码的我们该哪里下手呢...parsing XML document from " + resource, ex); } } 可以看出该方法主要逻辑是根据输入流加载 Document 文档对象,然后根据得到的文档对象注册到容器...该方法最后文档对象获取根元素,最后调用 DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(root) 进行注册。...ele, ex); } finally { this.parseState.pop(); } return null; } 我们看看该方法,可以看到,该方法XML

47930

深入理解-Spring-之源码剖析IOC(一)

这是维基百科的说法,楼主按照自己的思路分析一下IOC,楼主认为,分析一个问题,或者说证明一个事情,有2种方法,一是正向验证,即按照该事务的逻辑去验证正确性,还有一种是反向验证,证明该事务是否正确。...release 版本至今已经到了 5.0.3,和最初的 interface21 已经有了翻天复地的变化,现在也有了springboot, springcloud,俨然一个庞大的spring家族,想分析源码的我们该哪里下手呢...parsing XML document from " + resource, ex); } } 可以看出该方法主要逻辑是根据输入流加载 Document 文档对象,然后根据得到的文档对象注册到容器...该方法最后文档对象获取根元素,最后调用 DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(root) 进行注册。...ele, ex); } finally { this.parseState.pop(); } return null; } 我们看看该方法,可以看到,该方法XML

83620

Spring源码解析02:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析

文档被解析成DOM树,其中Document是整个DOM的根节点,root为根元素,由根元素一层一层向下解析element元素,容器启动解析XML流程就是这样。...XmlBeanFactory启动流程分析 XmlBeanFactory容器启动就两行代码 ClassPathResource resource = new ClassPathResource("spring-config.xml...{ // 把XML文件读取的Resource资源进行编码处理 return loadBeanDefinitions(new EncodedResource(resource)); } /...返回的bdHolder不为空,标签元素如果有自定义属性和自定义子节点,还需要再次对以上两个标签解析。具体逻辑参考4.2小节源码。...使用DefaultBeanDefinitionDocumentReader读取器Document对象解析出 Element。

26610

Spring5源码解析_IOC之容器的基本实现

DTO是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTO文件来看文档是否符合规范,元素和标签使用是否正确,一个DTO文档包含:元素的定义规则,元素间关系的定义规则,元素可以使用的属性...XML Schema描述了XML文档的结构,可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求,文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容...,并可根据此来检查一个XML文档是否有效。...XML,它包含两个部分: 一部分是名称空间的URL 另外一部分就是该名称空间所标识的XML Schema文件位置或URL地址(xsi:schemaLocation="http://www.springframework.org...return VALIDATION_AUTO; } } 源码分析 源码中我们可以看到,主要是通过读取XML文件的内容,判断内容中是否包含有DOCTYPE ,如果是则为DTD,否则为XSD,当然只会读取到第一个

12320
领券