Provide subclass hooks in path matching resolver

Update PathMatchingResourcePatternResolver to include additional
protected methods that can be used by subclasses to optimize which
JARs are searched.

Issue: SPR-12231
master
Phillip Webb 10 years ago
parent 4aa97f8945
commit 1947de3334
  1. 13
      spring-core/src/main/java/org/springframework/core/io/support/PathMatchingResourcePatternResolver.java

@ -35,7 +35,6 @@ import java.util.jar.JarFile;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
@ -317,9 +316,19 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol
// We need to have pointers to each of the jar files on the classpath as well...
addAllClassLoaderJarRoots(cl, result);
}
postProcessFindAllClassPathResourcesResult(location, result);
return result.toArray(new Resource[result.size()]);
}
/**
* Subclass hook allowing for post processing of a
* {@link #findAllClassPathResources(String) findAllClassPathResources} result.
* @param location the absolute path within the classpath
* @param result a mutable set of the results which can be post processed
*/
protected void postProcessFindAllClassPathResourcesResult(String location, Set<Resource> result) {
}
/**
* Convert the given URL as returned from the ClassLoader into a {@link Resource}.
* <p>The default implementation simply creates a {@link UrlResource} instance.
@ -338,7 +347,7 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol
* @param classLoader the ClassLoader to search (including its ancestors)
* @param result the set of resources to add jar roots to
*/
private void addAllClassLoaderJarRoots(ClassLoader classLoader, Set<Resource> result) {
protected void addAllClassLoaderJarRoots(ClassLoader classLoader, Set<Resource> result) {
if (classLoader instanceof URLClassLoader) {
try {
for (URL url : ((URLClassLoader) classLoader).getURLs()) {

Loading…
Cancel
Save