2.3. 内置Resource实现

Spring 包括几个内置的Resource实现:

有关 Spring Resource中可用实现的完整列表,请参阅javadoc Resource的“所有已知的实现类”部分 。

2.3.1. UrlResource

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

UrlResource是由 Java 代码通过显式使用UrlResource构造函数创建的,但通常是在调用 API 方法时隐式创建的,该方法采用String 表示路径的参数。对于后一种情况,JavaBeansPropertyEditor 最终决定创建哪种类型Resource。如果路径字符串包含一个众所周知的(对属性编辑器而言)前缀(例如classpath:),它会为该前缀创建一个适当的专用化Resource。但是,如果它不能识别前缀,它会假定该字符串是标准 URL 字符串并创建一个UrlResource.

2.3.2. ClassPathResource

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

如果类路径资源驻留在文件系统中,则此资源实现支持解析为 java.io.File,但不支持驻留在 jar 中且尚未(通过 servlet 引擎或任何环境)扩展到文件系统。为了解决这个问题,各种 Resource 实现始终支持解析为 java.net.URL

ClassPathResource是由 Java 代码通过显式使用ClassPathResource 构造函数创建的,但通常是在调用 API 方法时隐式创建的,该方法采用 String表示路径的参数。对于后一种情况,JavaBeans PropertyEditor识别字符串路径上的特殊前缀 ,classpath:,并在这种情况下创建 ClassPathResource

2.3.3. FileSystemResource

这是java.io.File句柄的Resource实现。它还支持 java.nio.file.Path句柄,应用 Spring 的标准基于字符串的路径转换,但通过java.nio.file.FilesAPI 执行所有操作。对于纯 java.nio.path.Path基于支持,请改用 PathResourceFileSystemResource 支持解析为FileURL

2.3.4. PathResource

这是句柄的Resource实现,通过API 执行所有操作和转换。它支持解析为 a和 as a并且还实现了扩展接口。 实际上是具有不同行为的纯基于替代方案。java.nio.file.Path``Path``File``URL``WritableResource``PathResource``java.nio.path.Path``FileSystemResource``createRelative

2.3.5. ServletContextResource

这是ServletContext资源的 Resource 实现,它解释相关 Web 应用程序根目录中的相对路径。

它始终支持流访问和 URL 访问,但仅在扩展 Web 应用程序存档且资源物理位于文件系统上时才允许java.io.File访问。它是否被扩展并在文件系统上或直接从 JAR 或其他地方(如数据库)访问(这是可以想象的)实际上取决于 Servlet 容器。

2.3.6. InputStreamResource

InputStreamResourceResource给定InputStream 的实现。只有在没有特定Resource实现适用时才应使用它。特别是,在可能的情况下,首选ByteArrayResource或任何基于文件的Resource 实现。

与其他Resource实现相比,这是一个已打开资源的描述符。因此,它isOpen()方法返回true。 如果您需要将资源描述符保存在某处或需要多次读取流,请不要使用它。

2.3.7. ByteArrayResource

这是Resource给定字节数组的实现。它为给定的字节数组创建一个 ByteArrayInputStream

它对于从任何给定的字节数组加载内容很有用,而不必求助于单次使用InputStreamResource

最后更新于