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