spring源码学习(2) -- dtd、xsd文件的查找

代码

这里写图片描述
上图是spring 配置bean的XML文件。其中有指定spring-beans使用的spring-beans-3.0.xsd文件的url。一般情况下对于schema 下对应的文件都是通过网络去加载,但是我们可以发现,在我们本机电脑不联网的时候,也是可以获取.xsd文件来对XML进行校验和解析。spring是如何做到这点的呢?

spring对于XML的解析

spring 对于XML的解析用到了jdk jar包中自带的内容 JAXP去解析XML文件的。
spring中对于XML解析为Document 是委托给DefaultDocumentLoader,关键代码如下:
这里写图片描述
标准的通过JAXP解析XML的步骤,创建工厂,创建解析类,然后进行解析。其中有一个EntityResolver,这里是解析并获取到对应的.XSD文件的关键。

spring对于dtd、xsd文件的查找

spring 中对于DTD、XSD文件的查找是委托给了DelegatingEntityResolver
这里写图片描述这里写图片描述
可以看到,对于DTD的查找委托给了BeansDtdResolver,对于XSD schemas的查找委托给了PluggableSchemaResolver。

PluggableSchemaResolver

这里写图片描述
这里写图片描述
从图中可以看到,spring会加载当前classLoader下面的所有的指定位置(META-INF/spring.schemas)的文件,并将其转换为Properties
我们可以看一下spring-beans包下自带的spring.schemas
这里写图片描述
这里写图片描述
前面是对应的schemaLocation中指定的xsd文件所在的路径,后面为xsd文件在jar包中的位置。这样spring就根据schemaLocation查找到了对应的XSD文件

BeansDtdResolver

这里写图片描述
对于DTD文件,spring会查找classpath下面是的名字为spring-beans.dtd的文件。

猜你喜欢

转载自blog.csdn.net/liu20111590/article/details/80003402