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完成对资源的远程获取。

相关推荐
zgl_200537799 分钟前
ZGLanguage 解析SQL数据血缘 之 标识提取SQL语句中的目标表
java·大数据·数据库·数据仓库·hadoop·sql·源代码管理
liwulin050610 分钟前
【JAVA】创建一个不需要依赖的websocket服务器接收音频文件
java·服务器·websocket
钦拆大仁16 分钟前
统一数据返回格式和统一异常处理
java
czlczl2002092529 分钟前
OAuth 2.0 解析:后端开发者视角的原理与流程讲解
java·spring boot·后端
颜淡慕潇37 分钟前
Spring Boot 3.3.x、3.4.x、3.5.x 深度对比与演进分析
java·后端·架构
g***557539 分钟前
Java高级开发进阶教程之系列
java·开发语言
阿达King哥1 小时前
在Windows11下编译openjdk 21
java·jvm
shark-chili1 小时前
从操作系统底层浅谈程序栈的高效性
java
不知疲倦的仄仄2 小时前
第二天:深入理解 Selector:单线程高效管理多个 Channel
java·nio
期待のcode2 小时前
Java虚拟机栈
java·开发语言·jvm