Spring核心模块解析—Resource与ResourceLoader接口

本文详细解析了Spring中的Resource模块,包括Resource接口的继承结构、功能及重要实现,如UrlResource、ClassPathResource、FileSystemResource等。同时介绍了ResourceLoader接口的作用,以及ResourcePatternResolver如何批量加载Resource对象。通过理解这些内容,可以更好地掌握Spring中资源的统一访问方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我们为什么要学习Spring下面的Resource模块?
首先我们要了解什么是资源,我们把资源来自于几个方面:比如spring中xml配置文件,url网络上不同渠道的资源,自建的properties文件等,程序对于这些资源的访问,被称之为资源访问。
我们在学习spring之前,接触过一些资源访问API,比如InputStream等文件的IO,java.net.URL。
首先,它们都不是专门为Web服务设计的,对于Spring服务,这些工具比较底层,直接使用这些方法,首先要编写更多额外的代码,比如文件是否存在的判断,路径转换。
其次,他们对于访问底层资源的能力不够,没有一种URL的实现可以访问需要从类路径的资源或者相对于ServletContext获得的资源,虽然可以为专门的URL前缀注册新的处理程序(类似于现有的用于前缀的处理程序:如http:),但是比较复杂。而且URL缺少需要的一些功能,比如检查被指向的资源是否存在的方法(上面提到过,原理在于,URL表示一个统一的资源定位符,一个指向互联网上“资源”的指针,较于Resource更侧重于web资源,而Resource是实现资源的抽象,可以检查资源是否存在)。
Spring整合了获取资源的工具,统一读取例如本地文件,classpath项目路径下的文件,url互联网上的文件等不同渠道的资源,也封装了打开流,关闭流,报错处理等大量重复模板的代码,专程设计Resource接口类。

Resource内容

继承结构

在这里插入图片描述
代码如下:

public interface Resource extends InputStreamSource

InputStreamSource接口:spring核心工具包输入流接口,该接口只有一个抽象方法,每次调用这个方法都会得到一个新的流。

public interface InputStreamSource {
   
    InputStream getInputStream() throws IOException;
}
DOC解释
 * Interface for a resource descriptor that abstracts from the actual
 * type of underlying resource, such as a file or class path resource.
 *从实际类型的底层资源(例如文件或类路径资源)中抽象出来的资源描述符的接口
提供的功能
boolean exists();//返回Resource所指向的底层资源是否存在

default boolean isReadable() {
     //返回当前Resource代表的底层资源是否可读
		return exists();
	}
default boolean isOpen() {
   
		//返回Resource资源文件是否已经打开,如果是,则只能被读取一次然后关闭以避免内存泄漏
		//常见的Resource实现一般都返回false
		return false;
	}
//如果当前Resource代表的底层资源能由java.util.URL代表,则返回URL,否则抛出io异常
	URL getURL() throws IOException;
//如果当前Resource代表的底层资源能由java.util.URI代表,则返回该URI,否则抛出io异常
	URI getURI() throws IOException;
//	如果当前Resource代表的底层资源能由java.io.File代表,则返回FIle,否则抛出io异常
	File getFile() throws IOException;
	
//返回当前Resource代表的底层资源的长度,一般是值代表的文件资源的长度。
	long contentLength() throws IOException;
	
//返回当前Resource代表的底层资源的最后修改时间。
	long lastModified() throws IOException;
	@Nullable
	//返回当前Resource代表的底层文件资源的文件路径,比如File资源“file://E:/hao/wang.txt”将返回“E:/hao/wang.txt
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值