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

相关推荐
wangkay883 分钟前
【Java 转运营】Day05:抖音新号起号:对标账号运营全指南
java·新媒体运营
大飞哥~BigFei17 分钟前
新版chrome浏览器安全限制及解决办法
java·前端·chrome·安全·跨域
{Hello World}24 分钟前
Java多态:三大条件与实现详解
java·开发语言
老蒋每日coding24 分钟前
Java解析Excel并对特定内容做解析成功与否的颜色标记
java·开发语言·excel
lang2015092825 分钟前
Java反射利器:Apache Commons BeanUtils详解
java·开发语言·apache
m0_7482459225 分钟前
SQLite 数据类型概述
java·数据库·sqlite
Mh_ithrha32 分钟前
题目:小鱼比可爱(java)
java·开发语言·算法
wxm63136 分钟前
力扣算法题(C++):1、2
java·算法·leetcode
冰暮流星38 分钟前
sql语言之where语句
java·数据库·sql