28
28
import org .springframework .context .ResourceLoaderAware ;
29
29
import org .springframework .core .io .Resource ;
30
30
import org .springframework .core .io .ResourceLoader ;
31
+ import org .springframework .core .io .support .PathMatchingResourcePatternResolver ;
31
32
import org .springframework .core .io .support .ResourcePatternResolver ;
33
+ import org .springframework .core .io .support .ResourcePatternUtils ;
32
34
33
35
/**
34
- * {@link FactoryBean} implementation that takes a list of location strings and creates a sorted array
35
- * of {@link Resource} instances.
36
+ * {@link FactoryBean} implementation that takes a list of location Strings
37
+ * and creates a sorted array of {@link Resource} instances.
38
+ *
36
39
* @author Dave Syer
37
40
* @author Juergen Hoeller
38
41
* @author Christian Dupuis
@@ -42,45 +45,48 @@ public class SortedResourcesFactoryBean extends AbstractFactoryBean<Resource[]>
42
45
43
46
private final List <String > locations ;
44
47
45
- private ResourceLoader resourceLoader ;
48
+ private ResourcePatternResolver resourcePatternResolver ;
49
+
46
50
47
51
public SortedResourcesFactoryBean (List <String > locations ) {
48
52
this .locations = locations ;
49
- setSingleton ( true );
53
+ this . resourcePatternResolver = new PathMatchingResourcePatternResolver ( );
50
54
}
51
55
52
- @ Override
53
- public Class <? extends Resource []> getObjectType () {
54
- return Resource []. class ;
56
+ public SortedResourcesFactoryBean ( ResourceLoader resourceLoader , List < String > locations ) {
57
+ this . locations = locations ;
58
+ this . resourcePatternResolver = ResourcePatternUtils . getResourcePatternResolver ( resourceLoader ) ;
55
59
}
56
60
61
+
57
62
public void setResourceLoader (ResourceLoader resourceLoader ) {
58
- this .resourceLoader = resourceLoader ;
63
+ this .resourcePatternResolver = ResourcePatternUtils .getResourcePatternResolver (resourceLoader );
64
+ }
65
+
66
+
67
+ @ Override
68
+ public Class <? extends Resource []> getObjectType () {
69
+ return Resource [].class ;
59
70
}
60
71
61
72
@ Override
62
73
protected Resource [] createInstance () throws Exception {
63
74
List <Resource > scripts = new ArrayList <Resource >();
64
- for (String location : locations ) {
65
- if (resourceLoader instanceof ResourcePatternResolver ) {
66
- List <Resource > resources = new ArrayList <Resource >(Arrays
67
- .asList (((ResourcePatternResolver ) resourceLoader ).getResources (location )));
68
- Collections .sort (resources , new Comparator <Resource >() {
69
- public int compare (Resource r1 , Resource r2 ) {
70
- try {
71
- return r1 .getURL ().toString ().compareTo (r2 .getURL ().toString ());
72
- }
73
- catch (IOException ex ) {
74
- return 0 ;
75
- }
75
+ for (String location : this .locations ) {
76
+ List <Resource > resources = new ArrayList <Resource >(
77
+ Arrays .asList (this .resourcePatternResolver .getResources (location )));
78
+ Collections .sort (resources , new Comparator <Resource >() {
79
+ public int compare (Resource r1 , Resource r2 ) {
80
+ try {
81
+ return r1 .getURL ().toString ().compareTo (r2 .getURL ().toString ());
82
+ }
83
+ catch (IOException ex ) {
84
+ return 0 ;
76
85
}
77
- });
78
- for (Resource resource : resources ) {
79
- scripts .add (resource );
80
86
}
81
- }
82
- else {
83
- scripts .add (resourceLoader . getResource ( location ) );
87
+ });
88
+ for ( Resource resource : resources ) {
89
+ scripts .add (resource );
84
90
}
85
91
}
86
92
return scripts .toArray (new Resource [scripts .size ()]);
0 commit comments