?
Ce document utilise Manuel du site Web PHP chinois Libérer
Spring提供了很多 Resource
的實現(xiàn):
UrlResource
封裝了java.net.URL
,它能夠被用來訪問任何通過URL可以獲得的對象,例如:文件、HTTP對象、FTP對象等。所有的URL都有個標準的 String
表示,這些標準前綴可以標識不同的URL類型,包括file:
訪問文件系統(tǒng)路徑,http:
通過HTTP協(xié)議訪問的資源,ftp:
通過FTP訪問的資源等等。
UrlResource
對象可以在Java代碼中顯式地使用 UrlResource
構(gòu)造函數(shù)來創(chuàng)建。但更多的是通過調(diào)用帶表示路徑的 String
參數(shù)的API函數(shù)隱式地創(chuàng)建。在后一種情況下,JavaBeans的 PropertyEditor
會最終決定哪種類型的
Resource
被創(chuàng)建。如果這個字符串包含一些眾所周知的前綴,比如
classpath:
,它就會創(chuàng)建一個對應(yīng)的已串行化的 Resource
。
然而,如果不能分辨出這個前綴,就會假定它是個標準的URL字符串,然后創(chuàng)建UrlResource
。
這個類標識從classpath獲得的資源。它會使用線程context的類加載器(class loader)、給定的類加載器或者用來載入資源的給定類。
如果類路徑上的資源存在于文件系統(tǒng)里,這個 Resource
的實現(xiàn)會提供類似于java.io.File
的功能。而如果資源是存在于還未解開(被servlet引擎或其它的環(huán)境解開)的jar包中,這些 Resource
實現(xiàn)會提供類似于java.net.URL
的功能。
ClassPathResource
對象可以在Java代碼中顯式地使用ClassPathResource
構(gòu)造函數(shù)來創(chuàng)建。但更多的是通過調(diào)用帶表示路徑的String
參數(shù)的API函數(shù)隱式地創(chuàng)建。在后一種情況下,JavaBeans的 PropertyEditor
會分辨字符串中 classpath:
前綴,然后相應(yīng)創(chuàng)建 ClassPathResource
。
這是為 ServletContext
資源提供的 Resource
實現(xiàn),它負責解析相關(guān)web應(yīng)用根目錄中的相對路徑。
它始終支持以流和URL的方式訪問。 但是只有當web應(yīng)用包被解開并且資源在文件系統(tǒng)的物理路徑上時,才允許以 java.io.File
方式訪問。是否解開并且在文件系統(tǒng)中訪問,還是直接從JAR包訪問或以其它方式訪問如DB(這是可以想象的),僅取決于Servlet容器。
這是為給定的 InputStream
而準備的 Resource
實現(xiàn)。它只有在沒有其它合適的 Resource
實現(xiàn)時才使用。而且,只要有可能就盡量使用 ByteArrayResource
或者其它基于文件的Resource
實現(xiàn)。
與其它 Resource
實現(xiàn)不同的是,這是個 已經(jīng)
打開資源的描述符-因此 isOpen()
函數(shù)返回 true
。
如果你需要在其它位置保持這個資源的描述符或者多次讀取一個流,請不要使用它。