ResourceLoader原理

java 复制代码
public class DefaultResourceLoader implements ResourceLoader {
	public static final String CLASSPATH_URL_PREFIX = "classpath:";
	@Override
	public Resource getResource(String location) {
		for (ProtocolResolver protocolResolver : getProtocolResolvers()) {
			Resource resource = protocolResolver.resolve(location, this);
			if (resource != null) {
				return resource;
			}
		}
		// 如果"/"开头,则最终还是类加载器处理
		if (location.startsWith("/")) {
			return getResourceByPath(location);
		}else if (location.startsWith(CLASSPATH_URL_PREFIX)) { // 如果"classpath"开头,则最终还是类加载器处理
			return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
		}else {
			try {
				// http协议:加载本地文件或者外部资源,
				URL url = new URL(location);
				return (ResourceUtils.isFileURL(url) ? new FileUrlResource(url) : new UrlResource(url));
			}
			catch (MalformedURLException ex) {
				// 还是类加载器处理
				return getResourceByPath(location);
			}
		}
	}
}

判断是否为文件:查看url协议是否file or vfsfile or vfs,否则直接返回UrlResource。

UrlResource处理对象为外部资源,即网站、图片等协议为Http的外部资源【例如,无法处理jar包】。底层是JDK完成对资源的远程获取。

相关推荐
专注VB编程开发20年4 分钟前
python运行提速方案全解
java·linux·服务器
涤生大数据8 分钟前
大数据面试高频题:row_number() 数据倾斜到底怎么解决?
java·大数据·面试
weixin_446729168 分钟前
注解和反射
java·开发语言
摇滚侠12 分钟前
HashMap 源码解析 底层原理 面试如何回答
java·面试·职场和发展
凯瑟琳.奥古斯特16 分钟前
常见加密算法及应用
java·开发语言·网络·网络协议·职场和发展
devilnumber17 分钟前
java的lambda妙用举例
java·lambda
invicinble21 分钟前
springboot提供的机制大全
java·spring boot·后端
Han_han91921 分钟前
题⽬ 4:订单商品统计:
java
彦为君32 分钟前
JavaSE-11-ByteBuffer(NIO核心组件)
java·开发语言·前端·数据库·后端·spring·nio
Kiling_070440 分钟前
面向对象和集合编程题 ( 二 )
java·开发语言·数据结构·算法