浅析EntityResolver在Spring加载Bean中的作用,赶紧收藏啊!!!!

本文探讨了Spring框架中EntityResolver的两个实现类ResourceEntityResolver和DelegatingEntityResolver,重点分析了ResourceEntityResolver的resolveEntity方法在验证XSD时的角色。EntityResolver的主要任务是通过spring.schemas来查找本地文件,替代网络资源,提升IO稳定性,减少对网络的依赖。文章提醒读者,Spring的一些功能并不复杂,理解其核心思想即可。
摘要由CSDN通过智能技术生成

EntityResolver的实现类

友情提示:下面的代码可能很多,会劝退一些人,大家只要着重看我注释的地方就可以,因为如果看源码,要深究每一行代码,那么几乎就无法完成了,需要的是理解spring的思路以及重点的地方。

  1. ResourceEntityResolver
  2. DelegatingEntityResolver
    共有两个实现类,而ResourceEntityResolver继承了DelegatingEntityResolver类,并重写了resolveEntity方法。
    ResourceEntityResolver的resolveEntity方法代码如下:
public InputSource resolveEntity(@Nullable String publicId, @Nullable String systemId) throws SAXException, IOException {
		// 这里的super.resolveEntity(DelegatingEntityResolver)方法划重点,这也是本类的最终作用,由于验证XML文件正常需要通过网络去访问网址,不理解的可以去搜索一下哈,很简单的,这里不再阐述,由于网络等原因带来的不良好体验,所以Spring建立了如图1.1的文件供验证使用
        InputSource source = super.resolveEntity(publicId, systemId);
        // 下面的代码块我认为是,由于spring为了预防加载失败时,使用网络的方式进行验证,有兴趣同学可以看一下。
        if (source == null && systemId != null) {
            String resourcePath = null;

            String url;
            try {
                url = URLDecoder.decode(systemId, "UTF-8");
                String givenUrl = (new URL(url)).toString();
                String systemRootUrl = (new File("")).toURI().toURL().toString();
                if (givenUrl.startsWith(systemRootUrl)) {
                    resourcePath = givenUrl.substring(systemRootUrl.length());
                }
            } catch (Exception var9) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Could not resolve XML entity [" + systemId + "] against system root URL"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值