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

相关推荐
zzb15805 分钟前
Agent案例-智能文档问答助手
java·人工智能·笔记·python
dd向上13 分钟前
【计算机毕设/课设】在职全栈开发工程师接单:Java(SpringBoot+Vue)/小程序/C++(Qt/MFC) 定制与辅导
java·spring boot·课程设计
ckm紫韵14 分钟前
Maven搭建私服Nexus教程
java·maven·nexus
故以往之不谏16 分钟前
JAVA--类和对象4.1--构造方法基础
java·开发语言·javascript
014-code17 分钟前
Java Optional 那些被忽略的用法
java·数据库·javase
A 小码农19 分钟前
亲测AI智能小助手-IDEA中使用腾讯混元大模型
java·人工智能·intellij-idea
eggwyw19 分钟前
redis 使用
java
ERBU DISH21 分钟前
ChatGLM2-6B模型推理流程和模型架构详解
java
BullSmall26 分钟前
IntelliJ IDEA 安装与环境配置指南(2026 最新)
java·ide·intellij-idea
Javatutouhouduan30 分钟前
SQL优化从入门到精通!
java·数据库·mysql·sql优化·java面试·后端开发·java程序员