2012-12-21 41 views
14

我正在處理一些Spring XML配置文件,有時他們使用"classpath:/datasource.xml",有時候使用"classpath:datasource.xml"。兩者之間是否存在差異,或者是可選/隱含/冗餘的領先/Spring XML中的「classpath:」和「classpath:/」有什麼區別?

+0

我沒有看到這兩者之間的任何區別。您將看到的最大區別是相對路徑和類路徑位置上的*。 – muruga

+0

@muruga其實我也看到過,這是什麼意思? – ArtB

回答

18

我沒有看到這兩者之間的任何區別。你會看到的最大的區別是相對路徑,並在classpath位置

這裏的*是來自Spring Resources的摘錄,尋找節4.7.2.2

的Classpath *:
的「類路徑*:「前綴還可以與其他位置路徑中的PathMatcher模式組合使用,例如」classpath *:META-INF/* - beans.xml「。在這種情況下,解析策略非常簡單:在最後一個非通配符路徑段上使用ClassLoader.getResources()調用來獲取類加載器層次結構中的所有匹配資源,然後關閉每個資源相同的PathMatcher解析策略如上所述用於通配符子路徑。

這意味着像「classpath *:*。xml」這樣的模式不會從jar文件的根目錄中檢索文件,而僅從擴展目錄的根目錄中檢索文件。這起源於JDK的ClassLoader.getResources()方法中的限制,該方法僅返回傳入的空字符串的文件系統位置(指示要搜索的潛在根)。