Spring 提供了一个强大加载资源的机制,不但能够通过“classpath:”、“file:”
等资源地址前缀识别不同的资源类型,还支持Ant 风格带通配符的资源地址。
首先,我们来了解一下Spring 支持哪些资源类型的地址前缀:
其中和“classpath:”对应的,还有另一种比较难理解的“classpath*:”前缀。
假设有多个JAR 包或文件系统类路径都拥有一个相同的包名(如com.baobaotao)。“classpath:”
只会在第一个加载的com.baobaotao 包下查找,而“classpath*:”会到扫描所有这些JAR 包
及类路径下出现的com.baobaotao 类路径。
这对于分模块打包的应用非常有用,假设一个名为baobaotao 的应用共分成3 个模块,
一个模块都对应一个配置文件,分别是module1.xml,module2.xml 及module3.xml,都放
到com.baobaotao 目录下,每个模块单独打JAR 包。使用“classpath*:com/baobaotao/
module*.xml”将可以成功加载到这三个模块的配置文件,而使用“classpath:com/baobaotao/
module*.xml”时只会加载一个模块的配置文件。
Ant 风格资源地址支持3 种匹配符:
?:匹配文件名中的一个字符;
*:匹配文件名中任意个字符;
**:匹配多层路径。
下面是几个Ant 风格的资源路径的示例:
classpath:com/t?st.xml: 匹配com 类路径下com/test.xml , com/tast.xml 或者com/txst.xml;
file:D:/conf/*.xml:匹配文件系统D:/conf 目录下所有以xml 为后缀的文件;
classpath:com/**/test.xml:匹配com 类路径下(当前目录及其子孙目录)的test.xml文件;
classpath:org/springframework/**/*.xml:匹配类路径org/springframework 下所有以xml 为后缀的文件;
classpath:org/**/servlet/bla.xml:匹配类路径org/springframework/servlet/bla.xml,也匹配org/springframework/testing/servlet/bla.xml,还匹配org/servlet/bla.xml。