2012-08-17 140 views
9

我見過一些使用classpath:/some/path/to/resource URL協議直接從運行時類路徑中讀取配置文件和其他資源的Spring代碼。Java URL協議:classpath:/?

這是Spring構造還是Java構造?

除了這個問題我找不到任何文檔 - URL to load resources from the classpath in Java,這並不表示任何方式。

如果是Java構造,任何人都可以指向我的官方文檔嗎?

+0

我建議閱讀關於'ResourceLoader'抽象:http://static.springsource.org/spring/docs/3.0.x/reference/resources.html#resources-resourceloader – 2012-08-22 20:59:09

回答

11

那麼你可以隨時註冊URL處理程序。 Java也有一個file:///和jar:handler。另外class.getResource將默認從classpath中讀取。

http://code.google.com/p/madura-classpath-protocol-handler/

顯然這是一個春天的特點。

「您可以在JDK的RT.JAR文件中看到這些標準處理程序和相關的實現類。查找完全限定名稱以sun.net.www.protocol開頭的類。例如,類sun。 net.www.protocol.http.Handler定義了HTTP協議處理程序,類sun.net.www.protocol.ftp.Handler定義了FTP協議處理程序類。「

http://java.sun.com/developer/onlineTraining/protocolhandlers/

「異常在線程 」主「 java.net.MalformedURLException:未知協議:類路徑」 (說的java 1.6)

+0

酷技巧!我不知道你可以註冊自己的處理程序(+1)!但是,你知道'classpath'是否是Spring定義/註冊的URL處理程序,或者它是否隨Java一起提供?再次感謝! – IAmYourFaja 2012-08-17 13:22:17

+0

我認爲這是一個內在的春天特徵(看那裏的鏈接) – 2012-08-17 13:28:46

4

類路徑:特定於彈簧。 Spring的資源解析機制(即PathMatchingResourcePatternResolver或其他實施)知道"classpath:"和「classpath *:」前綴。

它接受並解析爲ClassPathResource對象,該對象碰巧實現彈簧Resource接口。

Resource接口,除此之外,有一個getInputStream()方法可用於獲取內容,而不必知道它是什麼類型的資源。

這與任何URL協議處理完全分開,所以您不一定能夠直接將其添加爲協議處理程序。

但是,您可能會使用ClassPathResource類本身作爲協議處理程序的一部分。