Resoure资源由ResourceLoader统一加载,调用getResource方法
![](https://img.haomeiwen.com/i12792403/45024195c732f15e.png)
ResourceLoader的UML类图\
![](https://img.haomeiwen.com/i12792403/f50ca3ccf2413c74.png)
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);
}
}
}
}
网友评论