返回介绍

2.7 获取 Document

发布于 2025-04-22 22:09:07 字数 1647 浏览 0 评论 0 收藏

经过了验证模式准备的步骤就可以进行 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 到底是做什么用的呢?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。