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

相关推荐
掘金-我是哪吒24 分钟前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪1 小时前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
wfsm1 小时前
spring事件使用
java·后端·spring
微风粼粼1 小时前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄1 小时前
设计模式之中介者模式
java·设计模式·中介者模式
rebel2 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温3 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2743 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba3 小时前
Maven
java·maven
张人玉4 小时前
C# 常量与变量
java·算法·c#