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

相关推荐
alonewolf_9921 分钟前
JDK17 GC调优全攻略:从参数解析到实战优化
java·jvm
豆沙沙包?30 分钟前
2026年--Lc336-1448. 统计二叉树中好节点的数目(树)--java版
java·开发语言·深度优先
青小莫32 分钟前
C++之类和对象(下)
java·开发语言·c++
9号达人33 分钟前
AI最大的改变可能不是写代码而是搜索
java·人工智能·后端
Wiktok35 分钟前
关于Python继承和super()函数的问题
java·开发语言
七夜zippoe36 分钟前
数据库事务隔离级别与Spring传播行为深度解析
java·数据库·spring·mvcc·acid·myslq
Stecurry_3044 分钟前
Springmvc理解从0到1 完整代码详解
java·spring boot·spring
Knight_AL1 小时前
Mono 使用指南:响应式编程的核心概念与实践
java·mono
这里是彪彪1 小时前
Java中的volatile关键字的作用
java·开发语言
独自破碎E1 小时前
【归并】数组中的逆序对
java·数据结构·算法