Spring 资源访问通配符和 classpath 和 classpath*区别
配置前缀
- classpath: 从类路径中加载资源,
- classpath*:所有包含指定包名的路径
- file: 使用URLResource从文件系统目录中装载资源, 请使用绝对路径
- http:// 使用URLResource从web服务器中装载资源
- ftp://使用URLResource从ftp服务器装载资源
- 无前缀 根据ApplicationContext的具体实现类采用对应类型的resource ,一般指定的是 classpath 下的路径 ( web项目中是 ServletContext 下的路径,基本一样 ) 匹配符
- ?: 匹配文件名中的一个字符
- *: 匹配文件名中的任意个字符
- **:匹配多层路径
classpath:app-Beans.xml
说明:无通配符,必须完全匹配
classpath:App?-Beans.xml
说明:匹配一个字符,例如 App1-Beans.xml 、 App2-Beans.xml
classpath:user/*/Base-Beans.xml
说明:匹配零个或多个字符串(只针对名称,不匹配目录分隔符等),例如:user/a/Base-Beans.xml 、 user/b/Base-Beans.xml ,但是不匹配 user/Base-Beans.xml
classpath:user/**/Base-Beans.xml
说明:匹配路径中的零个或多个目录,例如:user/a/ab/abc/Base-Beans.xml,同时也能匹配 user/Base-Beans.xml
classpath:**/*-Beans.xml
说明:表示在所有的类路径中查找和加载文件名以“-Beans.xml”结尾的配置文件,但重复的文件名只加载其中一个,视加载顺序决定
classpath*:user/**/*-Beans.xml
classpath*:**/*-Beans.xml
说明:“classpath*:”表示加载多个资源文件( 依赖的jar包也会寻找 ),即使重名也会被加载
使用位置及示例
在 Spring 中任何需要加载资源的地方都可以使用
示例 :
// 1
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
// 2
Resource resource = context.getResource("file:E:/Java_document/JavaWebTest/study-04/src/main/resources/hello.txt");
// 3
Resource resource = context.getResource("classpath:hello.properties");
// 4
Resource resource = context.getResource("http://127.0.0.1:80/test.txt");
// 5
@PropertySource("classpath:hello.properties")
// 6
<context:property-placeholder location="classpath:hello.properties"/>
classpath: 和 classpath*:区别
classpath: :只会到你的项目的 ClassLoader 对应的输出目录路径中查找找文件。
classpath*::不仅包含ClassLoader 对应的输出目录路径,还包括你的项目所依赖的jar包的输出目录路径 /WEB-INF/classes 下的所有资源