• Resource接口解读


    Resource接口解读

    Resource介绍

    Resource是spring的资源策略接口,Resource定义了一套资源框架。spring提供了更加丰富的资源的定义。对不同来源的资源文件都有相应的 Resource 实现∶文件(FileSystemResource)、Classpath 资源(ClassPathResource)、URL 资源(UrlResource)、InputStream资源(InputStreamResource)、Byte 数组(ByteArrayResource)等

    在 Java 中,将不同来源的资源抽象成 URL,通过注册不同的 handler(URLStreamHandler)来处理不同来源的资源的读取逻辑,一般 handler 的类型使用不同前缀(协议,Protocol)来识别,如"fle∶"、“http∶”、“jar∶"等,然而 URL 没有默认定义相对 Classpath 或 ServletContext 等资源的 handler,虽然可以注册自己的 URLStreamHandler来解析特定的 URL前缀(协议),比如"classpath∶”,然而这需要了解 URL 的实现机制,而且URL也没有提供一些基本的方法,如检查当前资源是否存在、检查当前资源是否可读等方法。因而 Spring 对其内部使用到的资源实现了自己的抽象结构∶Resource 接口来封装底层资源。

    Resource源码

    Resource是spring的资源策略接口,Resource定义了一套资源框架。spring提供了更加丰富的资源的定义。实现了Resource接口的类拥有更加丰富的访问资源访问功能。

    public interface Resource extends InputStreamSource {
    	// 判断资源是否存在
        boolean exists();
        
        default boolean isReadable() {
            return true;
        }
        //判断资源是否打开
        default boolean isOpen() {
            return false;
        }
        //判断资源是否是一个文件
        default boolean isFile() {
            return false;
        }
        //获取资源文件的URL
        URL getURL() throws IOException;
        //获取资源文件的URI
        URI getURI() throws IOException;
        
        File getFile() throws IOException;
        //默认实现,返回的是ReadableByteChannel,这个类属于Java的NIO中的管道。
        default ReadableByteChannel readableChannel() throws IOException {
            return Channels.newChannel(getInputStream());
        }
        long contentLength() throws IOException;
        long lastModified() throws IOException;
        //根据relativePath返回一个相对与该Resource的Resource
        Resource createRelative(String relativePath) throws IOException;
        @Nullable
        String getFilename();
        String getDescription();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    Resource的实现类或继承接口

    WritableResource:可写资源接口,是Spring3.1版本新增的接口,有两个实现类FileSystemResource和PathResource,其中PathResource是Spring4.0提供的实现类。

    ByteArrayResource:二进制数组表示的资源,二进制数组资源可以在内存中通过程序构造。

    ClassPathResource:类路径下的资源,资源以相对路径的方式表示。

    FileSystemResource:文件系统资源,资源一文件系统的路径表示,如D:/aaa/vvv.java

    InputStreamResource:以输入流表示返回的资源。

    ServletContextResource:问访问Web容器上下文中的资源而设计的类,负责对于Web应用根目录的路径加载资源。它支持以流和URL的方式访问,在WAR解包的情况下,也可以通过File方式访问。该类还可以直接从JAR包中访问资源。

    UrlResource:URL封装了java.net.URL,它使用户能够访问任任何可以通过URL表示的资源,如文件系统的资源、HTTP资源、FTP资源等。

    PathResource:Spring4.0提供的读取资源文件的新类。Path封装了java.net.URL、java.nio.Path、文件系统资源,它使用户能够访问任何可以通过URL、Path、系统文件路径表示的资源,如文件系统的资源,HTTP资源、FTP资源等。

    请添加图片描述

    FileSystemResource的使用例子

    FileSystemResource是Resource其中的一个实现类,提供了文件系统资源访问的能力。下面有简单的使用例子。

    @SpringBootTest
    public class ResourceTest {
    
        @Test
        public void testFileSystemResourc() throws IOException {
            String path = "F://test.txt";
            FileSystemResource fileSystemResource = new FileSystemResource(path);
            
            InputStream inputStream = fileSystemResource.getInputStream();
            //FileSystemResource实现了WritableResource接口
            OutputStream outputStream = fileSystemResource.getOutputStream();
            
            System.out.println(fileSystemResource.isFile());
            System.out.println("长度:"+fileSystemResource.contentLength());
            System.out.println("文件名"+fileSystemResource.getFilename());
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    代码随想录训练营第24天|回溯算法理论基础、LeetCode 77.组合
    Web前端大作业 体育主题足球网页制作 足球梅西HTML网页设计制作 dreamweaver学生网页源代码
    物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合
    C++ Reference: Standard C++ Library reference: C Library: cstring: strcpy
    【软考-中级】系统集成项目管理工程师-质量管理历年案例
    第59节——redux-toolkit中的createSelector
    CPP代码检查工具
    复旦-华盛顿大学EMBA科创的奥E丨《神奇的材料》与被塑造的我们
    2024最新群智能优化算法:人工原生动物优化器(Artificial Protozoa Optimizer ,APO))求解23个函数,MATLAB代码
    二叉树的创建以及遍历
  • 原文地址:https://blog.csdn.net/qq_43203949/article/details/125472034