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

相关推荐
人道领域几秒前
SSM框架从入门到入土(SpringFrameWork)
java·spring boot·tomcat
源力祁老师13 分钟前
深入解析 Odoo 中 default_get 方法的功能
java·服务器·前端
团子的二进制世界13 分钟前
Sentinel-服务保护(限流、熔断降级)
java·开发语言·sentinel·异常处理
NWU_白杨14 分钟前
多线程安全与通信问题
java
sheji341619 分钟前
【开题答辩全过程】以 工业车辆维修APP设计与实现为例,包含答辩的问题和答案
java
虫小宝25 分钟前
淘客系统的容灾演练与恢复:Java Chaos Monkey模拟节点故障下的服务降级与快速切换实践
java·开发语言
yxm263366908128 分钟前
【洛谷压缩技术续集题解】
java·开发语言·算法
键盘帽子29 分钟前
多线程情况下长连接中的session并发问题
java·开发语言·spring boot·spring·spring cloud
无名-CODING41 分钟前
Spring事务管理完全指南:从零到精通(上)
java·数据库·spring
fengxin_rou1 小时前
【黑马点评实战篇|第一篇:基于Redis实现登录】
java·开发语言·数据库·redis·缓存