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

相关推荐
swordbob3 小时前
缓存延迟双删的两种策略
java·缓存
凡人叶枫3 小时前
Effective C++ 条款08:别让异常逃离析构函数
java·linux·数据库·c++·嵌入式开发
云烟成雨TD3 小时前
Agent Scope Java 2.x 系列【4】模型层
java·人工智能·agent
云烟成雨TD3 小时前
Agent Scope Java 2.x 系列【5】智能体抽象层
java·人工智能·agent
阿伟AI说3 小时前
Codex 桌面版接入国产模型系列二:Codex++
java·开源软件·ai编程·腾讯云ai代码助手
love_muming4 小时前
链表每日一练
java·开发语言·数据结构·链表·idea·每日一练
范什么特西4 小时前
重点:mybatis注意细节
java·mysql·mybatis
乐观勇敢坚强的老彭4 小时前
GESP一级核心算法:循环与条件判断的结合
java·数据结构·算法
雪宫街道4 小时前
SpringBoot 向 IOC 容器注册组件的两种姿势:@Configuration 与 @Import
java·spring boot·后端·spring
北城以北88884 小时前
虚拟机安装JDK,Tomcat,部署项目
java·开发语言·tomcat