1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.springframework.batch.core.configuration.support;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21
22 import org.springframework.beans.BeansException;
23 import org.springframework.beans.factory.BeanFactoryAware;
24 import org.springframework.beans.factory.FactoryBean;
25 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
26 import org.springframework.beans.factory.config.BeanPostProcessor;
27 import org.springframework.beans.factory.config.CustomEditorConfigurer;
28 import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
29 import org.springframework.context.ApplicationContext;
30 import org.springframework.context.ApplicationContextAware;
31 import org.springframework.core.io.Resource;
32
33
34
35
36
37
38
39
40 public class ClasspathXmlApplicationContextsFactoryBean implements FactoryBean, ApplicationContextAware {
41
42 private List<Resource> resources = new ArrayList<Resource>();
43
44 private boolean copyConfiguration = true;
45
46 private Class<? extends BeanFactoryPostProcessor>[] beanFactoryPostProcessorClasses;
47
48 private Class<?>[] beanPostProcessorExcludeClasses;
49
50 private ApplicationContext applicationContext;
51
52
53
54
55
56
57
58
59
60
61
62 public void setResources(Resource[] resources) {
63 this.resources = Arrays.asList(resources);
64 }
65
66
67
68
69
70
71
72
73 public void setCopyConfiguration(boolean copyConfiguration) {
74 this.copyConfiguration = copyConfiguration;
75 }
76
77
78
79
80
81
82
83
84
85 public void setBeanFactoryPostProcessorClasses(
86 Class<? extends BeanFactoryPostProcessor>[] beanFactoryPostProcessorClasses) {
87 this.beanFactoryPostProcessorClasses = beanFactoryPostProcessorClasses;
88 }
89
90
91
92
93
94
95
96
97
98
99 public void setBeanPostProcessorExcludeClasses(Class<?>[] beanPostProcessorExcludeClasses) {
100 this.beanPostProcessorExcludeClasses = beanPostProcessorExcludeClasses;
101 }
102
103
104
105
106
107
108
109
110
111 @Override
112 public Object getObject() throws Exception {
113
114 if (resources == null) {
115 return new ApplicationContextFactory[0];
116 }
117
118 List<ApplicationContextFactory> applicationContextFactories = new ArrayList<ApplicationContextFactory>();
119 for (Resource resource : resources) {
120 GenericApplicationContextFactory factory = new GenericApplicationContextFactory(resource);
121 factory.setCopyConfiguration(copyConfiguration);
122 if (beanFactoryPostProcessorClasses != null) {
123 factory.setBeanFactoryPostProcessorClasses(beanFactoryPostProcessorClasses);
124 }
125 if (beanPostProcessorExcludeClasses != null) {
126 factory.setBeanPostProcessorExcludeClasses(beanPostProcessorExcludeClasses);
127 }
128 factory.setApplicationContext(applicationContext);
129 applicationContextFactories.add(factory);
130 }
131 return applicationContextFactories.toArray(new ApplicationContextFactory[applicationContextFactories.size()]);
132 }
133
134
135
136
137
138
139
140
141 @Override
142 public Class<?> getObjectType() {
143 return ApplicationContextFactory[].class;
144 }
145
146
147
148
149
150
151 @Override
152 public boolean isSingleton() {
153 return true;
154 }
155
156
157
158
159
160
161
162
163
164 @Override
165 public void setApplicationContext(ApplicationContext applicationContext) {
166 this.applicationContext = applicationContext;
167 }
168
169 }