其實沒區別,spring 規定 "classpath:" pseudo-URL,偽url路徑,在處理這種路徑前綴時候,會把這個偽url去掉。
public class DefaultResourceLoaderPractice { @Test public void test_defaultResourceLoader()throws Throwable{ DefaultResourceLoader defaultResourceLoader = new DefaultResourceLoader(); Resource resource = defaultResourceLoader.getResource("springCorePractice/classPathResource.txt"); System.out.println(resource.getFile()); } @Test public void test_defaultResourceLoader_classpath()throws Throwable{ DefaultResourceLoader defaultResourceLoader = new DefaultResourceLoader(); Resource resource = defaultResourceLoader.getResource("classpath:springCorePractice/classPathResource.txt"); System.out.println(resource.getFile()); } @Test public void test_defaultResourceLoader_classpath_1()throws Throwable{ DefaultResourceLoader defaultResourceLoader = new DefaultResourceLoader(); Resource resource = defaultResourceLoader.getResource("classpath:/springCorePractice/classPathResource.txt"); System.out.println(resource.getFile()); } }
//都是輸出: /home/xxx/workspace-sts-3.6.0.RELEASE/doctor/springmvc-practice/target/test-classes/springCorePractice/classPathResource.txt
關於Spring加載classpath與classpath*的過程剖析
Spring加載resource時classpath*:與classpath:的區別
1.1 WEB應用中的classpath是什么
JavaEE中classpath與系統環境變量中的classpath不一樣,WEB應用中的classpath專指項目WEB-INF/classes和WEB-INF/lib,
web容器在啟動時會對WEB-INF/classes和WEB-INF/lib目錄下的class文件、配置文件以及jar文件進行加載,
當然,配置文件的加載是根據web.xml中的配置(顯示配置了文件路徑或者配置了其它類而在類內部進行加載配置文件)來的,
web容器並不會自動加載WEB-INF/classes下的配置文件。
不過既然所有的web容器都會以WEB-INF/classes和WEB-INF/lib作為classpath,那么這就是一個規范,而且這么重要的內容,沒有規范也不合理,
但是這個規范是誰制定的?在哪里能找到此規范呢?還有,此處的classpath應該是web容器的classpath。
1.2 classpath:與classpath*:有何區別
一般在web.xml、spring xml等配置文件中會有如下配置:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <property name="locations"> <list> <value>classpath*:conf.properties</value> </list> </property>
【classpath: 】此配置表示告訴web容器去classpath(WEB-INF/classes和WEB-INF/lib)中去加載指定名稱的配置文件,若是有同名文件,則只會加載一個。
【classpath*:】此配置表示告訴web容器去classpath(WEB-INF/classes和WEB-INF/lib)中去加載指定名稱的配置文件,若是有同名文件則會全部加載。
附錄
參考資料:
[1]. http://blog.csdn.net/andyelvis/article/details/6719996(tomcat的classpath)
[2]. http://blog.csdn.net/kkdelta/article/details/5507799(classpath:與classpath*:的區別)