2.2. Resource接口
位于org.springframework.core.io.
包中的SpringResource
接口旨在成为一个更强大的接口,用于抽象对低级资源的访问。以下清单提供了Resource
界面的概述。有关详细信息,请参阅 Resource
javadoc。
正如Resource
接口的定义所示,它扩展了InputStreamSource
接口。以下清单显示了InputStreamSource
接口的定义:
Resource
接口中一些最重要的方法是:
getInputStream()
:定位并打开资源,返回一个InputStream
用于从资源中读取。预计每次调用都会返回一个新的InputStream
. 调用者有责任关闭流。exists()
:返回一个boolean
指示此资源是否实际以物理形式存在的值。isOpen()
:返回一个boolean
指示此资源是否表示具有打开流的句柄。如果为true
, 则InputStream
不能多次读取,必须只读取一次然后关闭以避免资源泄漏。对于所有常用资源实现返回false
(InputStreamResource
除外)。getDescription()
:返回此资源的描述,用于在使用该资源时输出错误。这通常是完全限定的文件名或资源的实际 URL。
其他方法让您获得表示资源的实际URL
或File
对象(如果底层实现兼容并支持该功能)。
Resource
接口的一些实现还为支持写入的资源实现了扩展 WritableResource
接口。
Spring 本身广泛使用Resource
抽象,在需要资源时作为许多方法签名中的参数类型。某些 Spring API 中的其他方法(例如各种 ApplicationContext
实现的构造函数)采用 String
,该 String
以原始或简单的形式用于创建适合该上下文实现的资源,或者通过 String
路径上的特殊前缀,让调用者指定必须创建和使用特定的资源实现。
虽然Resource
接口在 Spring 和 Spring 中被大量使用,但实际上在您自己的代码中将其本身用作通用实用程序类非常方便,用于访问资源,即使您的代码不知道或不关心spring任何其他部分。虽然这会将您的代码与 Spring 耦合,但它实际上只将它耦合到这一小部分实用程序类,它可以作为更强大的替代品,URL
并且可以被认为等同于您将用于此目的的任何其他库。
Resource
抽象不会取代功能。它尽可能地包装它。例如,UrlResource 包装 URL 并使用包装的 URL 来完成其工作。
最后更新于