【Java】Spring之Resource(三)


  Java的各種URL前綴的標准類和標准處理程序不足以完全訪問低級資源。例如,沒有URL可用於訪問需要從類路徑或相對於a獲取的資源的標准化實現 ServletContext雖然可以為專用URL 前綴注冊新的處理程序(類似於現有的前綴處理程序http:),但這通常非常復雜,並且URL接口仍然缺少一些理想的功能,例如檢查資源是否存在的方法指着。

Resource接口

  Spring的Resource接口是一個更強大的接口,用於抽象對低級資源的訪問。以下清單顯示了Resource接口定義:

 1 public interface Resource extends InputStreamSource {
 2 
 3     boolean exists();
 4 
 5     boolean isOpen();
 6 
 7     URL getURL() throws IOException;
 8 
 9     File getFile() throws IOException;
10 
11     Resource createRelative(String relativePath) throws IOException;
12 
13     String getFilename();
14 
15     String getDescription();
16 
17 }

  如Resource界面定義所示,它擴展了InputStreamSource 界面。以下清單顯示了InputStreamSource 界面的定義:

1 public interface InputStreamSource {
2 
3     InputStream getInputStream() throws IOException;
4 
5 }

  Resource界面中一些最重要的方法是:

    getInputStream():找到並打開資源,返回InputStream從資源中讀取的內容。預計每次調用都會返回一個新的 InputStream。呼叫者有責任關閉流。

    exists():返回boolean指示此資源是否實際以物理形式存在的指示。

    isOpen():返回一個boolean指示此資源是否表示具有打開流的句柄的指示符。如果true,InputStream不能多次讀取,必須只讀一次然后關閉以避免資源泄漏。false所有常規資源實現的返回值,但InputStreamResource。

    getDescription():返回此資源的描述,用於處理資源時的錯誤輸出。這通常是完全限定的文件名或資源的實際URL。

    其他方法允許您獲取表示資源的實際URL或File對象(如果底層實現兼容並支持該功能)。

Resource實現

  Spring包括以下Resource實現:

  • UrlResource:UrlResource包裝a java.net.URL並可用於訪問通常可通過URL訪問的任何對象,例如文件,HTTP目標,FTP目標等。
  • ClassPathResource:此類表示應從類路徑獲取的資源。它使用線程上下文類加載器,給定的類加載器或給定的類來加載資源。
  • FileSystemResource:這是一個Resource實現java.io.Filejava.nio.file.Path處理。它支持分辨率作為FileURL
  • ServletContextResource:這是一個資源Resource實現,用於ServletContext解釋相關Web應用程序根目錄中的相對路徑。
  • InputStreamResource:InputStreamResourceResource給定實現InputStream只有在沒有Resource適用的具體實施時才應使用它
  • ByteArrayResource:這是Resource給定字節數組的實現。ByteArrayInputStream為給定的字節數組創建一個 

ResourceLoader

  該ResourceLoader接口旨在由可以返回(即加載)Resource實例的對象實現。以下清單顯示了ResourceLoader 接口定義:

1 public interface ResourceLoader {
2 
3     Resource getResource(String location);
4 
5 }

  調用getResource()特定的應用程序上下文,並且指定的位置路徑沒有特定的前綴時,您將返回一個Resource適合該特定應用程序上下文的類型。例如,假設針對ClassPathXmlApplicationContext實例執行了以下代碼片段:

1 Resource template = ctx.getResource("some/resource/path/myTemplate.txt");

  

前綴 示例 說明

classpath:

classpath:com/myapp/config.xml

從類路徑加載

file:

file:///data/config.xml

從文件系統加載

http:

https://myserver/logo.png

加載為URL

(none)

/data/config.xml

取決於潛在的ApplicationContext 

  應用程序上下文構造函數值中的資源路徑可以是簡單路徑,每個路徑都與目標進行一對一映射Resource,或者可以包含特殊的“classpath *:”前綴或內部Ant-樣式正則表達式(使用Spring的PathMatcher實用程序匹配)。后者都是有效的通配符。

  “classpath *:” 此特殊前綴指定必須獲取與給定名稱匹配的所有類路徑資源,然后合並以形成最終的應用程序上下文定義。

  Ant風格的資源地址,支持3種匹配符;

  • ?:匹配文件名中的一個字符;
  •  * :匹配文件名中的任意個字符
  •  **:匹配多層路徑

  下面是幾個示例:

  classpath:com/ssh/t?st.xml:匹配com/ssh路徑下的com/ssh/test.xml、com/ssh/tast.xml等
  file:D:/conf/*Config.xml:匹配文件系統D:/conf路徑下的所有文件以Config.xml為后綴的文件,比如匹配HibernateConf.xml,SpringConf.xml等;
  classpath:com/**/test/xml:匹配com類路徑下(當前目錄及其子孫目錄)的test.xml文件,比如匹配:com/a/test.xml、com/a/b/c/d/test.xml等

 

 

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM