spring加载resource时classpath*:与classpath:的区别

时间:2021-03-26 18:47:13

对于spring加载resource时classpath*和classpath的区别,一直没有研究,今天在此总结一下:

Spring可以通过指定classpath*:或classpath:前缀加路径的方式从classpath下加载文件。
1)classpath*:可以从多个jar文件中加载相同的文件。
2)classpath:只能加载找到的第一个文件。
或者换句话说: classpath只会加载第一个有文件的classpath,classpath*会从所有的classpath下加载。


一般加载的优先级:当前classes > jar包中的classes。


如果项目中使用通配符加载资源文件,此时classpath*:就可以派上用场了,如果不加*,只会加载第一个找到的classpath下的文件。例子如下:
<param-value>classpath*:spring/spring-*.xml</param-value>


注意:
用classpath*:需要遍历所有的classpath,所以加载速度比较慢,个人喜欢使用classpath:,但前提是规划好资源文件的路径,尽量避免重名,导致资源文件加载不到的问题。