The ResourcePatternResolver
interface is an extension of the ResourceLoader
interface that defines a strategy for resolving a location pattern (such as an Ant-style path pattern) into Resource
objects.
public interface ResourcePatternResolver extends ResourceLoader {
String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
Resource[] getResources(String locationPattern) throws IOException;
}
As you can see above, this interface also defines a special resource prefix classpath*:
for all matching resources in the classpath. Please note that in this case the resource location must be a path without placeholders - for example, classpath*:/config/beans.xml
. JAR files or different directories in the classpath may contain multiple files with the same path and the same name.
The passed ResourceLoader
(for example, provided via ResourceLoaderAware
semantics) can be checked to see if it implements this extended interface.
PathMatchingResourcePatternResolver
is a standalone implementation that can be used outside of ApplicationContext
and is also used by ResourceArrayPropertyEditor
to populate properties of Resource[]
beans. PathMatchingResourcePatternResolver
can resolve a specified resource location path into one or more corresponding Resource
objects. The source path can be a simple path that has a one-to-one mapping to the target Resource
, or may contain a special prefix classpath*
:, and/or internal Ant-style standard expressions (mapped using the org.springframework.util.AntPathMatcher
in Spring). Both of the latter options are actually wildcards.
The ResourceLoader
by default in any standard ApplicationContext
is actually an instance of a PathMatchingResourcePatternResolver
that implements the ResourcePatternResolver
interface. The same is true for the ApplicationContext
instance itself, which also implements the ResourcePatternResolver
interface and delegates it to the standard PathMatchingResourcePatternResolver
.
GO TO FULL VERSION