?
このドキュメントでは、 php中國語ネットマニュアル リリース
Spring的 Resource
接口是為了提供更強的訪問底層資源能力的抽象。
public interface InputStreamSource { boolean exists(); boolean isOpen(); URL getURL() throws IOException; File getFile() throws IOException; Resource createRelative(String relativePath) throws IOException; String getFilename(); String getDescription(); }
public interface InputStreamSource { InputStream getInputStream() throws IOException; }
Resource
接口一些比較重要的方法如下:
getInputStream()
: 定位并打開資源,返回讀取此資源的一個 InputStream
。每次調(diào)用預期會返回一個新的 InputStream
,由調(diào)用者負責關閉這個流。
exists()
: 返回標識這個資源在物理上是否的確存在的 boolean
值。
isOpen()
: 返回標識這個資源是否有已打開流的處理類的 boolean
值。如果為 true
,則此InputStream
就不能被多次讀取,
而且只能被讀取一次然后關閉以避免資源泄漏。除了 InputStreamResource
,常見的resource實現(xiàn)都會返回 false
。
getDescription()
: 返回資源的描述,一般在與此資源相關的錯誤輸出時使用。此描述通常是完整的文件名或?qū)嶋H的URL地址。
其它方法讓你獲得表示該資源的實際的 URL
或 File
對象(如果隱含的實現(xiàn)支持該方法并保持一致的話)。
Spring自身處理資源請求的多種方法聲明中將Resource
抽象作為參數(shù)而廣泛地使用。
Spring APIs中的一些其它方法(比如許多ApplicationContext
的實現(xiàn)構造函數(shù)),使用普通格式的 String
來創(chuàng)建與context相符的Resource
,也可以使用特殊的路徑String
前綴來讓調(diào)用者指定創(chuàng)建和使用特定的 Resource
實現(xiàn)。
Resource
不僅被Spring自身大量地使用,它也非常適合在你自己的代碼中獨立作為輔助類使用。
用戶代碼甚至可以在不用關心Spring其它部分的情況下訪問資源。這樣的確會造成代碼與Spring之間的耦合,但也僅僅是與很少量的輔助類耦合。這些類可以作為比 URL
更有效的替代,而且與為這個目的而使用其它類庫基本相似。
需要注意的是 Resource
抽象并沒有改變功能:它盡量使用封裝。
比如 UrlResource
封裝了URL,然后使用被封裝的 URL
來工作。