Spring源码学习(八)——Spring.Beans(五)

    上一篇文章将xml的验证介绍完毕,这篇介绍doLoadBeanDefinitions方法实现的第二个功能,根据传入的inputSource创建相应的Document对象,这一功能是通过

Document doc = this.documentLoader.loadDocument(
					inputSource, getEntityResolver(), this.errorHandler, validationMode, isNamespaceAware());

上面这一行代码实现的。我们可以看到,XmlBeanDefinitonReader这个类持有一个DocumentLoader的对象,而DocumentLoader只是一个接口,实际交由DefaultDocumentLoader来实现。我们可以看到上面方法的参数有四个,一个是传入的inputSource,它封装着我们的底层资源,也就是xml配置文件,第二个参数是EntityResolver,这个参数干啥用的呢,这就需要说一下java对xml文件解析的方式了。

1.xml文件解析

    xml文件解析一般有四种方式,分别是DOM、SAX、JDOM和DOM4J。其中,前两种是基本的方法,后两种是基于前两种方法的扩展,主要针对java平台。

1).DOM

    DOM全称是Document Object Model,翻译过来就是文档对象模型。DOM通过对象模型的方式实现对html、xml文档的管理。众所周知,无论html还是xml,都是通过标签实现对文档中各个内容的组织管理。DOM通过实现DOM树实现一种分层结构来对html和xml文档进行组织管理。DOM中的每一个元素、文本、注释、属性都是一类节点,不同的节点根据DOM树的分层结构进行划分。就拿Demo中的spring-Config.xml举个例子:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="testBean" class="org.springframework.Demo.bean.TestBean"></bean>
</beans>

我们可以看到,首先,这个文档的根节点就是这个文档,即文档节点,一般情况下我们可以忽略它,我们把元素节点beans作为根节点来看,那么beans有三个兄弟节点是属性节点,分别是xmlns,xmlns:xsi和xsi:schemaLocation,beans的子节点是bean,bean有两个兄弟属性节点,id和class,属性的值如testBean是bean节点的子节点,类型是文本节点。从这里可以看出,DOM通过对节点树的实现和维护,完成对xml文档的解析。

2).SAX

       SAX与DOM同样是xml文件解析的一种方法,与DOM事先将整个文档加载至内存生成结构树再解析不同,SAX提供的是事件驱动型解析方式。SAX对xml文件解析时,会逐行对文件进行扫描,当扫描到文档、元素等开始与结束的地方时,也就是扫描到相应的标签时,就会触发相应的事件,从而执行相应的动作。与DOM相比,SAX执行速度更快,占用的内存资源更少,效率更高。    

3).JDOM和DOM4j

JDOM和DOM4J与前两者不同,是建立在二者至上的是专门为java语言开发的一套用于解析xml文件的api。其中,DOM4J是JDOM的一个智能分支,它不仅具有JDOM所具有的完全符合java编码风格的xml解析方法,并且扩展了许多超出xml文档表示的功能。

 

剩余内容可见:https://blog.youkuaiyun.com/qq_21399231/article/details/113093792

 

 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值