spring ResoureceLoader资源加载体系

2019-11-20  本文已影响0人  zzz_0427

Resoure资源由ResourceLoader统一加载,调用getResource方法

ResourceLoader的UML类图\

DefaultResourceLoader类实现ResourceLoader接口中的方法

public class DefaultResourceLoaderimplements ResourceLoader {

@Nullable

private ClassLoader classLoader;

/**

* /默认类加载器为Thread.currentThread().getContextClassLoader()

*/

  public DefaultResourceLoader() {

this.classLoader = ClassUtils.getDefaultClassLoader();

}

/**

*

*/

  public DefaultResourceLoader(@Nullable ClassLoader classLoader) {

this.classLoader = classLoader;

}

/**

* setter方法

*/

  public void setClassLoader(@Nullable ClassLoader classLoader) {

this.classLoader = classLoader;

}

/**

* getter方法

*/

  @Override

@Nullable

public ClassLoader getClassLoader() {

return (this.classLoader !=null ?this.classLoader : ClassUtils.getDefaultClassLoader());

}

@Override

public Resource getResource(String location) {

Assert.notNull(location,"Location must not be null");

//ProtocolResolver为用户自定义的资源协议解析器

      for (ProtocolResolver protocolResolver : getProtocolResolvers()) {

Resource resource = protocolResolver.resolve(location,this);

if (resource !=null) {

return resource;

}

}

//获取ClassPathContextResource类型的Resource  应该是FileSystemContextResource

      if (location.startsWith("/")) {

return getResourceByPath(location);

}

//获取ClassPathResource的resource

      else if (location.startsWith(CLASSPATH_URL_PREFIX)) {

return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());

}

//获取UrlResource的resource

      else {

try {

// Try to parse the location as a URL...

            URL url =new URL(location);

return (ResourceUtils.isFileURL(url) ?new FileUrlResource(url) :new UrlResource(url));

}

catch (MalformedURLException ex) {

// No URL -> resolve as resource path.

            return getResourceByPath(location);

}

}

}

}

上一篇 下一篇

猜你喜欢

热点阅读