Spring系列18:Resource接口及内置实现

本文内容

  1. Resource接口的定义
  2. Resource接口的内置实现
  3. ResourceLoader接口
  4. ResourceLoaderAware 接口

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值