美文网首页
Spring加载resource时classpath: 和 cl

Spring加载resource时classpath: 和 cl

作者: Ernest_Chou | 来源:发表于2018-12-04 21:54 被阅读0次

    Spring加载resource时classpath:classpath*:的区别

    Spring可以通过指定classpath*:classpath:前缀加路径的方式从classpath加载文件;如bean的定义文件classpath*:的出现是为了从多个jar文件中加载相同的文件;classpath:只能加载找到的第一个文件.

    1. java web项目中的classpath

    1.1 classpath的含义:

    classpath是指 WEB-INF文件夹下的classes目录 ,对应为项目src目录文件编译之后的文件夹。是一个定位资源的入口。

    1.2 classpath中文件优先访问级别

    libclasses下文件访问优先级的问题: lib>classes

    1.3 classpath:classpath*:区别

    • classpath:只会到你的class路径中查找找文件;

      • classpath的查找范围应该是/WEB-INF/classes,资源文件的缺省路径为src/main/resources,Maven在打包成war文件的时候,会将src/main/resources的资源文件复制到/WEB-INF/classes目录。
      • 如果要加载的资源, 不在当前ClassLoader的路径里,那么用classpath:前缀是找不到的, 这种情况下就需要使用classpath*:前缀
    • classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找,会从所有的calsspath中加载。当项目中有多个classpath路径,并同时加载多个classpath路径下的文件,就发挥了作用,如果不加,则表示仅仅加载第一个classpath路径。

      • 在多个classpath中存在同名资源,都需要加载, 那么用classpath:只会加载第一个,这种情况下也需要用classpath*:前缀

      • 注意:用classpath*:需要遍历所有的classpath,所以加载速度是很慢的,因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用 classpath*

    • **/:表示任意目录;

    • **/applicationContext-*.xml:表示任意目录下的以applicationContext-开头的XML文件。

    2. maven项目中的classpath

    2.1 maven项目中对应的classpath

    maven项目分为src/main/java目录、src/main/resources目录,src/test/java目录,/peis-src/test/resources目录:

    maven目录 编译文件目录
    • 其中src/main/java目录、src/main/resources目录对应到项目的target\classes目录,如果在src/main目录调用classpath,则class的根目录为target\classes

    • src/test/java目录,src/test/resources目录对应到test-classes目录,如果在src/test/java目录调用classpath,则class的根目录为target\test-classes

    相关文章

      网友评论

          本文标题:Spring加载resource时classpath: 和 cl

          本文链接:https://www.haomeiwen.com/subject/ikgpcqtx.html