Spring当中的Resource与ResourceLoader

Resource与ResourceLoader 1.什么是Resource(资源) Resource是一个广泛的概念,凡是可以通过IO进行读取的,都可以称为一个Resource,包括众多的类

Resource与ResourceLoader

1.什么是Resource(资源)

Resource是一个广泛的概念,凡是可以通过IO进行读取的,都可以称为一个Resource,包括众多的类型的Resource,下面是一些常见的Resource的概念:

  • 物理磁盘上存在的真实的文件,比如test.txt;
  • ClassPath下Jar包内部的一个文件,比如META-INF/spring.factories;
  • 远程服务器上的资源,可以通过URL定位到对应的资源的位置;

我们可以将Resource称为一个广义上的文件,只不过这个文件可能是来自各个地方,比如来自于本地文件,也可能来自于远程的文件。

既然资源可以理解成为一个广义上的文件,参考Java当中对于文件(File)的API设计,我们可以知道资源会存在如下这些特性?

  • 资源是否存在?
  • 资源是否可读?
  • 资源是否可写?
  • 资源的URL/URI地址?
  • 资源的文件名称?
  • 资源的大小(长度)?
  • 资源的最后一次修改时间

这些特性,对应的也就是SpringCore当中对于Resource这个接口的底层API设计。

public interface Resource extends InputStreamSource {  
  
    boolean exists();  
  
    default boolean isReadable() {  
       return exists();  
    }  
  
    default boolean isOpen() {  
       return false;  
    }  
  
    default boolean isFile() {  
       return false;  
    }  
  
    URL getURL() throws IOException;  
  
    URI getURI() throws IOException;  
  
    File getFile() throws IOException;  
  
    default ReadableByteChannel readableChannel() throws IOException {  
       return Channels.newChannel(getInputStream());  
    }  
  
    long contentLength() throws IOException;  
  
    long lastModified() throws IOException;  
  
    Resource createRelative(String relativePath) throws IOException;  
  
    String getFilename();  

    String getDescription();  
}

我们开发过程当中平时用的最多的Resource主要是以下两类:本地文件的Resource和ClassPath下Jar包当中内部嵌套的Resource

1.2 什么是ResourceLoader

既然存在有Resource,那么必然需要存在有资源的加载的加载器,需要通过加载器才能帮你找到对应的Resource。

Spring当中的ResourceLoader的主要作用,就是进行Resource的加载。

Comment