ResourcePatternResolver 接口是对 ResourceLoader 接口的扩展,它定义了将位置模式(例如,Ant 风格的路径模式)解析为 Resource
对象的策略:
public interface ResourcePatternResolver extends ResourceLoader {
String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
Resource[] getResources(String locationPattern) throws IOException;
}
从上面可以看出,这个接口还定义了一个特殊的 classpath*:
资源前缀,用于所有来自类路径的匹配资源。注意,在这种情况下,资源位置应该是一个没有占位符的路径—例如classpath*:/config/beans.xml
。JAR 文件或类路径中的不同目录可以包含具有相同路径和相同名称的多个文件。关于 classpath*:
资源前缀的通配符支持的进一步详情,请参见 应用程序上下文构造器资源路径中的通配符及其子章节。
可以检查传入的 ResourceLoader
(例如,通过 ResourceLoaderAware 语义提供的资源加载器)是否也实现了这个扩展接口。
PathMatchingResourcePatternResolver 是一个独立的实现,可在 ApplicationContext 之外使用,也可被 ResourceArrayPropertyEditor 用于填充 Resource[]
bean 属性。PathMatchingResourcePatternResolver 能够将一个指定的资源位置路径解析为一个或多个匹配的 Resource
对象。源路径可以是一个简单的路径,它与目标资源有一对一的映射,或者可以包含特殊的classpath*:
前缀和/或内部 Ant 风格的正则表达式(使用 Spring 的org.springframework.util.AntPathMatcher
工具匹配)。后者都是有效的通配符。
:::info 任何标准 ApplicationContext 中的默认 ResourceLoader 实际上是 PathMatchingResourcePatternResolver 的一个实例,它实现了 ResourcePatternResolver 接口。ApplicationContext 实例本身也是如此,它也实现了 ResourcePatternResolver 接口并委托给默认的 PathMatchingResourcePatternResolver。 :::