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 下的所有资源

Leave a Reply

Your email address will not be published. Required fields are marked *

lWoHvYe 无悔,专一