spring 配置資源路徑時候和web.xml中classpath前綴的理解


帶不帶 “classpath:” 前綴的區別

其實沒區別,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:的區別

 

spring配置文件中的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*:的區別)


免責聲明!

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



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