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

相关推荐
DN20201 分钟前
靠谱的AI销售机器人哪家好
java·人工智能·机器人
黎雁·泠崖7 分钟前
Java继承细节:子类继承父类成员的底层逻辑
java·开发语言
冷雨夜中漫步10 分钟前
Java中strip与trim()的区别
java·开发语言
heartbeat..15 分钟前
Redis 常用命令全解析:基础、进阶与场景化实战
java·数据库·redis·缓存
让我上个超影吧16 分钟前
天机学堂——多级缓存
java·spring boot·spring cloud
Yvonne爱编码30 分钟前
Java 接口学习核心难点深度解析
java·开发语言·python
带刺的坐椅30 分钟前
Solon AI Remote Skills:开启分布式技能的“感知”时代
java·llm·solon·mcp·skills
这周也會开心44 分钟前
SSM 配置 index 页面的实现方式
java·tomcat·springmvc
黎雁·泠崖1 小时前
Java继承入门:概念+特点+核心继承规则
java·开发语言
sheji34161 小时前
【开题答辩全过程】以 小区物业管理APP为例,包含答辩的问题和答案
java