- 前言
- 第一部分 核心实现
- 第 1 章 Spring 整体架构和环境搭建
- 第 2 章 容器的基本实现
- 第 3 章 默认标签的解析
- 第 4 章 自定义标签的解析
- 第 5 章 bean 的加载
- 第 6 章 容器的功能扩展
- 第 7 章 AOP
- 第二部分 企业应用
- 第 8 章 数据库连接 JDBC
- 第 9 章 整合 MyBatis
- 第 10 章 事务
- 第 11 章 SpringMVC
- 第 12 章 远程服务
- 第 13 章 Spring 消息
2.7 获取 Document
经过了验证模式准备的步骤就可以进行 Document 加载了,同样 XmlBeanFactoryReader 类对于文档读取并没有亲力亲为,而是委托给了 DocumentLoader 去执行,这里的 DocumentLoader 是个接口,而真正调用的是 DefaultDocumentLoader,解析代码如下:
DefaultDocumentLoader.java
public Document loadDocument(InputSource inputSource, EntityResolver entityResolver,
Exception {
ErrorHandler errorHandler, int validationMode, boolean namespaceAware) throws
DocumentBuilderFactory factory = createDocumentBuilderFactory(validationMode,
namespaceAware)
if (logger.isDebugEnabled()) {
logger.debug("Using JAXP provider [" + factory.getClass().getName() + "]");
}
DocumentBuilder builder = createDocumentBuilder(factory, entityResolver,
errorHandler);
return builder.parse(inputSource);
}
对于这部分代码其实并没有太多可以描述的,因为通过 SAX 解析 XML 文档的套路大致都差不多,Spring 在这里并没有什么特殊的地方,同样首先创建 DocumentBuilderFactory,再通过 DocumentBuilderFactory 创建 DocumentBuilder,进而解析 inputSource 来返回 Document 对象。对此感兴趣的读者可以在网上获取更多的资料。这里有必要提及一下 EntityResolver,对于参数 entityResolver,传入的是通过 getEntityResolver() 函数获取的返回值,如下代码:
protected EntityResolver getEntityResolver() {
if (this.entityResolver == null) {
// Determine default EntityResolver to use.
ResourceLoader resourceLoader = getResourceLoader();
if (resourceLoader != null) {
this.entityResolver = new ResourceEntityResolver(resourceLoader);
}
else {
this.entityResolver = new DelegatingEntityResolver (getBeanClassLoader());
}
}
return this.entityResolver;
}
那么,EntityResolver 到底是做什么用的呢?
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论