0


【Spring | 资源处理】

Resource

Resource 接口


  不幸的是,Java的标准

Java.net.URL

类和各种URL前缀的标准处理程序对于所有对低级资源的访问来说都不够充分。例如,没有标准化的URL实现可以用于访问需要从类路径或相对于

Servlet

上下文获得的资源。虽然可以为专用URL前缀注册新的处理程序(类似于http:等前缀的现有处理程序),但这通常相当复杂,并且URL接口仍然缺乏一些所需的功能,例如检查所指向的资源是否存在的方法。

介绍


  Java的标准

Java.net.URL

类和各种URL前缀的标准处理程序对于所有对低级资源的访问来说都不够充分,基于此,Spring 的

org.springframework.core.io.Resource 

接口旨在成为一个更强大的接口,用于抽象对低级资源的访问,有关

Resource

接口的更多详细信息,参考Resource。
在这里插入图片描述

publicinterfaceResourceextendsInputStreamSource{booleanexists();booleanisReadable();booleanisOpen();booleanisFile();URLgetURL()throwsIOException;URIgetURI()throwsIOException;FilegetFile()throwsIOException;ReadableByteChannelreadableChannel()throwsIOException;longcontentLength()throwsIOException;longlastModified()throwsIOException;ResourcecreateRelative(String relativePath)throwsIOException;StringgetFilename();StringgetDescription();}

 正如

Resource

接口的定义所示,它扩展了

InputStreamSource

接口。以下列表显示

InputStreamSource

接口的定义:

publicinterfaceInputStreamSource{InputStreamgetInputStream()throwsIOException;}

核心方法


Resource

接口的最核心方法如下:

  • getInputStream():定位并打开资源,返回用于从资源中读取的InputStream。预计每次调用都会返回一个新的 InputStream。 调用者需要负责关闭流。
  • exists():返回一个boolean值,用于判断当前资源是否存在。
  • isOpen():返回一个boolean值,判断当前资源是否是一个已打开的 InputStream。如果为 true,则不能多次读取InputStream ,必须只读取一次,然后关闭以避免资源泄漏。除InputStreamResource 外,对于所有常见的资源实现,返回false。
  • getDescription():返回该资源的描述,当处理资源出错时,资源的描述会用于错误信息的输出。一般来说,资源的描述是一个完全限定的文件名称,或者是当前资源的实际URL。

注:
资源抽象不会取代功能。它尽可能地将其包裹起来。例如,

UrlResource

包装了一个URL,并使用包装后的URL来完成其工作。

常见接口


Resource

一些常见接口:
类型接口输入流

org.springframework.core.io.InputStreamSource

只读资源

org.springframework.core.io.Resource

可写资源

org.springframework.core.io.WritableResource

编码资源

org.springframework.core.io.support.EncodedResource

上下文资源

org.springframework.core.io.ContextResource

图解关系如下:
在这里插入图片描述

优缺点


Resource

接口的优缺点:

  • 优点- Resource 接口是一个标准接口,可以用于任何资源加载,不管资源是在文件中、在数据库中或其他地方。- Resource 接口提供了同步和异步加载方法,可以适应不同的应用场景。- Resource 接口可以方便地获取资源的元数据信息,例如资源的大小、修改时间等。- Resource 接口支持资源锁定和解锁,可以避免多个线程同时访问同一个资源导致的问题。
  • 缺点:- Resource 接口需要应用层自己维护资源之间的依赖关系以及管理生命周期,比较麻烦。- Resource 接口对内存敏感,如果加载的资源过多可能会导致内存溢出。- Resource 接口不支持动态加载和更新资源,需要手动进行操作。

内置Resource实现


Spring 包含几个内置Resource实现:

  • UrlResource
  • ClassPathResource
  • FileSystemResource
  • PathResource
  • ServletContextResource
  • InputStreamResource
  • ByteArrayResource
    资源来源前缀描述
    UrlResource
    
file:、https:、ftp: 

ClassPathResource
classpath:
FileSystemResource
file:
PathResource

ServletContextResource

InputStreamResource

ByteArrayResource

UrlResource


UrlResource 

封装了一个 java.net.URL 对象,用于访问可通过 URL 访问的任何对象,例如文件、HTTPS 目标、FTP 目标等。所有 URL 都可以通过标准化的字符串形式表示,因此可以使用适当的标准化前缀来指示一种 URL 类型与另一种 URL 类型的区别。 这包括:file:用于访问文件系统路径;https:用于通过 HTTPS 协议访问资源;ftp:用于通过 FTP 访问资源等等。

UrlResource 

是由Java代码显式使用

UrlResoResource

构造函数创建的,但当您调用采用

String

参数表示路径的API方法时,通常会隐式创建。对于后一种情况,

JavaBeans PropertyEditor

最终决定创建哪种类型的

Resource

。如果路径字符串包含一个众所周知的(对属性编辑器来说就是)前缀(例如classpath:),它会为该前缀创建一个适当的专用

Resource

。但是,如果它不能识别前缀,它会假定该字符串是标准URL字符串,并创建一个

UrlResource

ClassPathResource


ClassPathResource

从类路径上加载资源。它使用线程上下文加载器、给定的类加载器或给定的类来加载资源。

  如果类路径资源驻留在文件系统中,但不支持驻留在jar中且尚未(通过servlet引擎或任何环境)扩展到文件系统的类路径资源,则此

Resource

实现支持解析为

java.io.File

。为了解决这一问题,各种

Resource

实现始终支持解析为

java.net.URL

ClassPathResource

是由Java代码显式使用

ClassPath

资源构造函数创建的,但当您调用接受表示路径的String参数的API方法时,通常会隐式创建。对于后一种情况,

JavaBeans PropertyEditor

识别字符串路径上的特殊前缀

classpath:

,并在这种情况下创建一个

ClassPathResource

FileSystemResource


FileSystemResource

 java.io.File

的资源实现。它还支持

java.nio.file.Path 

,应用

Spring 

的标准对字符串路径进行转换。

FileSystemResource

支持解析为文件和 URL。

PathResource


PathResource

java.nio.file.Path

的资源实现。它实际上是

FileSystemResource

的纯

java.nio.path.path

替代方案,具有不同的

createRelative

行为。

ServletContextResource


ServletContextResource

ServletContext

的资源实现。它表示相应 Web 应用程序根目录中的相对路径。

  它始终支持流访问和URL访问,但仅当web应用程序归档扩展并且资源在文件系统上时才允许

java.io.File

访问。无论它是在文件系统上扩展还是直接从JAR或其他类似数据库的地方访问(这是可以想象的),实际上都取决于

Servlet

容器。

InputStreamResource


InputStreamResource

是指定

InputStream

的资源实现。注意:如果该

InputStream

已被打开,则不可以多次读取该流。

ByteArrayResource


ByteArrayResource

是指定的二进制数组的资源实现。它会为给定的字节数组创建一个

ByteArrayInputStream

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论
  你的支持就是我✍️创作的动力!                      💞💞💞

参考:
spring - Resource 官方文档

标签: spring 数据库 java

本文转载自: https://blog.csdn.net/wodejiaAA/article/details/131576783
版权归原作者 家有娇妻张兔兔 所有, 如有侵权,请联系我们删除。

“【Spring | 资源处理】”的评论:

还没有评论