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

相关推荐
zhaokuner3 小时前
01-领域与问题空间-DDD领域驱动设计
java·开发语言·设计模式·架构
、BeYourself3 小时前
Spring AI RAG 系统文档加载
java·后端·spring·springai
cike_y3 小时前
Spring:代理模式之静态代理&动态代理
java·后端·spring·代理模式
青岛少儿编程-王老师3 小时前
CCF编程能力等级认证GESP—C++8级—20251227
java·开发语言·c++
任子菲阳3 小时前
学JavaWeb第六天——JDBC & Mybatis
java·数据库·mybatis
计算机毕设指导63 小时前
基于微信小程序的个性化漫画阅读推荐系统【源码文末联系】
java·python·微信小程序·小程序·tomcat·maven·intellij-idea
Love Song残响3 小时前
高效自动化清理临时文件方案
java·开发语言·spring
技术小泽3 小时前
java转go语言入门基础篇(二)
java·golang
我不会写代码njdjnssj3 小时前
基于SpringBoot+SSM的外卖平台Day1-6
java·spring boot·后端