zoukankan      html  css  js  c++  java
  • DefaultResouceLoader的设计

    它是什么

    DefaultResourceLoader是Spring中的ResourceLoader的默认实现类,也是AbstractApplicationContext的父类,它也可以单独使用,用来从一个特定的位置来加载资源。

    如何支持不同的路径加载

    由于路径描述符的格式是多样的,比如URL的路径一般以Http开头,类路径一般以classpath开头,或者是以磁盘符开始的绝对路径,可能还有用户自己定义的路径格式,DefaultResourceLoader为了支持这些不同的路径协议,提供了一个抽象层,它是接口ProtocolResolver,这个接口的作用就是去解析自定义的路径协议,并返回已给资源。

    这是什么原理

    这种设计可以看作是策略模式,DefaultResourceLoader一般负责常规的资源加载,如果要支持特别的资源,则将这些资源交给不同的策略接口来加载,这样,就可以在不派生DefaultResourceLoader的情况下,支持对不同的资源的加载,特定协议只需要添加一个协议解析器即可。

    见代码:

    for (ProtocolResolver protocolResolver : this.protocolResolvers) 
    {
    	Resource resource = protocolResolver.resolve(location, this);
    	if (resource != null) {
    		return resource;
    	}
    }
    

    很简单的一个策略模式,让代码的扩展性极强。但是需要注意,由于只要由一个解析器返回了结果,后面的解析器就无法执行了,因此每个解析器都要对自己支持的资源做严格的判断,避免把不该自己处理的资源给处理了。

  • 相关阅读:
    整理DB2左补零,右补零的方法
    DB2复制表结构及数据
    两种方式,创建有返回值的DB2函数
    IDEA中Java目录结构
    uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。
    LeetCode_9_回文数字
    JAVA学习笔记
    学习过程中的杂记
    csrf(跨站请求伪造)
    Jquery中$(function(){})
  • 原文地址:https://www.cnblogs.com/humc/p/6046460.html
Copyright © 2011-2022 走看看