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;
    	}
    }
    

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

  • 相关阅读:
    hdu 4612 Warm up 桥缩点
    树上的一个题目
    2013 ACM/ICPC Asia Regional Online —— Warmup2
    hdu 3308 LCIS 线段树
    最近计划
    hdu 2121 , hdu 4009 无定根最小树形图
    POJ 3164 Command Network 最小树形图模板
    过滤器和拦截器
    struts中的请求数据自动封装
    struts中获取域
  • 原文地址:https://www.cnblogs.com/humc/p/6046460.html
Copyright © 2011-2022 走看看