Resource接口及内置实现

本文介绍了Spring的Resource接口,包括其定义、内置实现和使用场景。Resource接口提供了对低级资源的抽象访问,支持多种资源类型,如文件、HTTP、FTP等。文章详细讲解了ResourceLoader接口和ResourceAware接口,以及如何通过配置文件注入Resource到Bean中。同时,文章还讨论了资源路径的使用,包括带前缀和通配符的情况。最后,文章总结了Resource在Spring中的重要性和应用场景。
摘要由CSDN通过智能技术生成

Resource接口的定义

Java 的标准 java.net.URL 类和各种 URL 前缀的标准处理程序不足以满足所有对低级资源的访问。 例如没有标准化的 URL 实现可用于访问需要从类路径或相对于 ServletContext 获取的资源。 虽然可以为专门的 URL 前缀注册新的处理程序(类似于现有的前缀处理程序如 http:),但这通常相当复杂,并且 URL 接口仍然缺乏一些理想的功能,例如检查是否存在的方法 指向的资源。

针对上述这种情况,Spring 提供了更强大的接口Resource用于对低级资源的抽象访问,其定义和主要接口方法说明如下。

package org.springframework.core.io;

public interface Resource extends InputStreamSource {

	// 特定资源是否存在
	boolean exists();

    // 内容非空可通过#getInputStream()读取
	default boolean isReadable() {
		return exists();
	}

    // 资源对应的InputStream是否已经打开,不能多次读取,应读取后关闭避免资源泄漏
	default boolean isOpen() {
		return false;
	}

    // 是否是 File 类型,配合 #getFile()
	default boolean isFile() {
		return false;
	}

	// 获取 URL
	URL getURL() throws IOException;

	// 获取URI
	URI getURI() throws IOException;

	// 获取 File
	File getFile() throws IOException;

	// 资源内容长度
	long contentLength() throws IOException;

	// 上次修改的时间戳
	long lastModified() throws IOException;

	// 给定路径创建资源
	Resource createRelative(String relativePath) throws IOException;

	// 获取文件名非全路径
	@Nullable
	String getFilename();

	// 获取资源描述
	String getDescription();

}

Resource接口继承了InputStreamSource,其定义如下。

package org.springframework.core.io;

public interface InputStreamSource {
	// 获取资源对应的 InputStream
	InputStream getInputStream() throws IOException;
}

Resource接口并不是用于完全取代java.net.URL,而是尽可能地通过其实现类来包装URL进行处理,如UrlResource 包装一个 URL 并使用包装的 URL 来完成它的的功能。具体看下一节的内置实现。

Resource接口的内置实现

UrlResource

UrlResource 包装了 java.net.URL,可用于访问通常可通过 URL 访问的任何对象,例如文件、HTTP 目标

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值