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.Files
API 执行所有操作。对于纯 java.nio.path.Path
基于支持,请改用 PathResource
。FileSystemResource
支持解析为File
和 URL
。
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
InputStreamResource
是Resource
给定InputStream
的实现。只有在没有特定Resource
实现适用时才应使用它。特别是,在可能的情况下,首选ByteArrayResource
或任何基于文件的Resource
实现。
与其他Resource
实现相比,这是一个已打开资源的描述符。因此,它isOpen()
方法返回true
。 如果您需要将资源描述符保存在某处或需要多次读取流,请不要使用它。
2.3.7. ByteArrayResource
这是Resource
给定字节数组的实现。它为给定的字节数组创建一个 ByteArrayInputStream
。
它对于从任何给定的字节数组加载内容很有用,而不必求助于单次使用InputStreamResource
。
最后更新于