DefaultResourceLoader类认识

整体认识

面对这个类,名字就是默认的资源加载器,器实现了ResourceLoad接口。ResourceLoad接口指定了基础资源加载规范,这个接口很简单

public interface ResourceLoader {
	/** Pseudo URL prefix for loading from the class path: "classpath:". */
	String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_URL_PREFIX;
	Resource getResource(String location);
	@Nullable
	ClassLoader getClassLoader();

ResourceLoad接口中最重要的的就是类加载器,资源地址表达形式:

  • classpath:前缀开头的表达式,例如: classpath:smart-context.xml

  • “/”开头的表达式,例如:/WEB-INF/classes/smart-context.xml

  • 非“/”开头的表达,例如:WEB-INF/classes/smart-context.xml

  • url协议,例如:file:/D:/ALANWANG-AIA/Horse-workspace/chapter3/target/classes/smart-context.xml

回到DefaultResourceLoader类中,其中通过addProtocolResolver(ProtocolResolver resolver)方法来注册资源解析器,解析其他协议。

其中执行文件加载的方法就是getResource(String location)方法

public Resource getResource(String location) {
		Assert.notNull(location, "Location must not be null");

		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)) {
			return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
		}
		else {
			try {
				// Try to parse the location as a URL...
				URL url = new URL(location);
				return (ResourceUtils.isFileURL(url) ? new FileUrlResource(url) : new UrlResource(url));
			}
			catch (MalformedURLException ex) {
				// No URL -> resolve as resource path.
				return getResourceByPath(location);
			}
		}
	}

总结

该类是在阅读Spring IOC源码是,需要解析配置文件才接触到的,该类也就是辅助工具类,从类名也能清楚的知道该类的功能,因为我的重点不在此,也就不对该类进行进一步分析,往后有需要在丰富此篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值