16
16
17
17
package org .springframework .boot .web .reactive .context ;
18
18
19
+ import org .springframework .beans .factory .support .BeanNameGenerator ;
20
+ import org .springframework .beans .factory .support .DefaultListableBeanFactory ;
21
+ import org .springframework .context .annotation .AnnotatedBeanDefinitionReader ;
19
22
import org .springframework .context .annotation .AnnotationConfigApplicationContext ;
23
+ import org .springframework .context .annotation .ClassPathBeanDefinitionScanner ;
20
24
import org .springframework .context .annotation .Configuration ;
25
+ import org .springframework .context .annotation .ImportResource ;
26
+ import org .springframework .context .annotation .ScopeMetadataResolver ;
21
27
import org .springframework .core .env .ConfigurableEnvironment ;
22
28
import org .springframework .core .io .Resource ;
29
+ import org .springframework .lang .Nullable ;
23
30
import org .springframework .stereotype .Component ;
24
31
25
32
/**
35
42
* to deliberately override certain bean definitions via an extra Configuration class.
36
43
*
37
44
* @author Phillip Webb
45
+ * @author Stephane Nicoll
38
46
* @since 2.0.0
39
47
* @see AnnotationConfigApplicationContext
40
48
*/
41
49
public class AnnotationConfigReactiveWebApplicationContext
42
50
extends AnnotationConfigApplicationContext
43
51
implements ConfigurableReactiveWebApplicationContext {
44
52
53
+ /**
54
+ * Create a new AnnotationConfigReactiveWebApplicationContext that needs to be
55
+ * populated through {@link #register} calls and then manually {@linkplain #refresh
56
+ * refreshed}.
57
+ */
58
+ public AnnotationConfigReactiveWebApplicationContext () {
59
+ }
60
+
61
+ /**
62
+ * Create a new AnnotationConfigApplicationContext with the given
63
+ * DefaultListableBeanFactory.
64
+ * @param beanFactory the DefaultListableBeanFactory instance to use for this context
65
+ * @since 2.2.0
66
+ */
67
+ public AnnotationConfigReactiveWebApplicationContext (
68
+ DefaultListableBeanFactory beanFactory ) {
69
+ super (beanFactory );
70
+ }
71
+
72
+ /**
73
+ * Create a new AnnotationConfigApplicationContext, deriving bean definitions from the
74
+ * given annotated classes and automatically refreshing the context.
75
+ * @param annotatedClasses one or more annotated classes, e.g.
76
+ * {@link Configuration @Configuration} classes
77
+ * @since 2.2.0
78
+ */
79
+ public AnnotationConfigReactiveWebApplicationContext (Class <?>... annotatedClasses ) {
80
+ super (annotatedClasses );
81
+ }
82
+
83
+ /**
84
+ * Create a new AnnotationConfigApplicationContext, scanning for bean definitions in
85
+ * the given packages and automatically refreshing the context.
86
+ * @param basePackages the packages to check for annotated classes
87
+ * @since 2.2.0
88
+ */
89
+ public AnnotationConfigReactiveWebApplicationContext (String ... basePackages ) {
90
+ super (basePackages );
91
+ }
92
+
45
93
@ Override
46
94
protected ConfigurableEnvironment createEnvironment () {
47
95
return new StandardReactiveWebEnvironment ();
@@ -53,4 +101,232 @@ protected Resource getResourceByPath(String path) {
53
101
return new FilteredReactiveWebContextResource (path );
54
102
}
55
103
104
+ /**
105
+ * Return the custom {@link BeanNameGenerator} for use with
106
+ * {@link AnnotatedBeanDefinitionReader} and/or
107
+ * {@link ClassPathBeanDefinitionScanner}, if any.
108
+ * @return the bean name generator
109
+ * @deprecated since 2.2.0 since this class no longer extends
110
+ * {@code AbstractRefreshableConfigApplicationContext}
111
+ */
112
+ @ Deprecated
113
+ protected final BeanNameGenerator getBeanNameGenerator () {
114
+ throw new UnsupportedOperationException ();
115
+ }
116
+
117
+ /**
118
+ * Return the custom {@link ScopeMetadataResolver} for use with
119
+ * {@link AnnotatedBeanDefinitionReader} and/or
120
+ * {@link ClassPathBeanDefinitionScanner}, if any.
121
+ * @return the scope metadata resolver
122
+ * @deprecated since 2.2.0 since this class no longer extends
123
+ * {@code AbstractRefreshableConfigApplicationContext}
124
+ */
125
+ @ Deprecated
126
+ protected ScopeMetadataResolver getScopeMetadataResolver () {
127
+ throw new UnsupportedOperationException ();
128
+ }
129
+
130
+ /**
131
+ * Register a {@link org.springframework.beans.factory.config.BeanDefinition} for any
132
+ * classes specified by {@link #register(Class...)} and scan any packages specified by
133
+ * {@link #scan(String...)}.
134
+ * <p>
135
+ * For any values specified by {@link #setConfigLocation(String)} or
136
+ * {@link #setConfigLocations(String[])}, attempt first to load each location as a
137
+ * class, registering a {@code BeanDefinition} if class loading is successful, and if
138
+ * class loading fails (i.e. a {@code ClassNotFoundException} is raised), assume the
139
+ * value is a package and attempt to scan it for annotated classes.
140
+ * <p>
141
+ * Enables the default set of annotation configuration post processors, such that
142
+ * {@code @Autowired}, {@code @Required}, and associated annotations can be used.
143
+ * <p>
144
+ * Configuration class bean definitions are registered with generated bean definition
145
+ * names unless the {@code value} attribute is provided to the stereotype annotation.
146
+ * @param beanFactory the bean factory to load bean definitions into
147
+ * @see #register(Class...)
148
+ * @see #scan(String...)
149
+ * @see #setConfigLocation(String)
150
+ * @see #setConfigLocations(String[])
151
+ * @see AnnotatedBeanDefinitionReader
152
+ * @see ClassPathBeanDefinitionScanner
153
+ * @deprecated since 2.2.0 since this class no longer extends
154
+ * {@code AbstractRefreshableConfigApplicationContext}
155
+ */
156
+ @ Deprecated
157
+ protected void loadBeanDefinitions (DefaultListableBeanFactory beanFactory ) {
158
+ throw new UnsupportedOperationException ();
159
+ }
160
+
161
+ /**
162
+ * Build an {@link AnnotatedBeanDefinitionReader} for the given bean factory.
163
+ * <p>
164
+ * This should be pre-configured with the {@code Environment} (if desired) but not
165
+ * with a {@code BeanNameGenerator} or {@code ScopeMetadataResolver} yet.
166
+ * @param beanFactory the bean factory to load bean definitions into
167
+ * @return the annotated bean definition reader
168
+ * @see #getEnvironment()
169
+ * @see #getBeanNameGenerator()
170
+ * @see #getScopeMetadataResolver()
171
+ * @deprecated since 2.2.0 since this class no longer extends
172
+ * {@code AbstractRefreshableConfigApplicationContext}
173
+ */
174
+ @ Deprecated
175
+ protected AnnotatedBeanDefinitionReader getAnnotatedBeanDefinitionReader (
176
+ DefaultListableBeanFactory beanFactory ) {
177
+ throw new UnsupportedOperationException ();
178
+ }
179
+
180
+ /**
181
+ * Build a {@link ClassPathBeanDefinitionScanner} for the given bean factory.
182
+ * <p>
183
+ * This should be pre-configured with the {@code Environment} (if desired) but not
184
+ * with a {@code BeanNameGenerator} or {@code ScopeMetadataResolver} yet.
185
+ * @param beanFactory the bean factory to load bean definitions into
186
+ * @return the class path bean definition scanner
187
+ * @see #getEnvironment()
188
+ * @see #getBeanNameGenerator()
189
+ * @see #getScopeMetadataResolver()
190
+ * @deprecated since 2.2.0 since this class no longer extends
191
+ * {@code AbstractRefreshableConfigApplicationContext}
192
+ */
193
+ @ Deprecated
194
+ protected ClassPathBeanDefinitionScanner getClassPathBeanDefinitionScanner (
195
+ DefaultListableBeanFactory beanFactory ) {
196
+ throw new UnsupportedOperationException ();
197
+ }
198
+
199
+ /**
200
+ * Set the config locations for this application context in init-param style, i.e.
201
+ * with distinct locations separated by commas, semicolons or whitespace.
202
+ * <p>
203
+ * If not set, the implementation may use a default as appropriate.
204
+ * @param location the config location
205
+ * @deprecated since 2.2.0 since this class no longer extends
206
+ * {@code AbstractRefreshableConfigApplicationContext}. Use {@link ImportResource}
207
+ * instead.
208
+ */
209
+ @ Deprecated
210
+ public void setConfigLocation (String location ) {
211
+ throw new UnsupportedOperationException ();
212
+ }
213
+
214
+ /**
215
+ * Set the config locations for this application context.
216
+ * <p>
217
+ * If not set, the implementation may use a default as appropriate.
218
+ * @param locations the config locations
219
+ * @deprecated since 2.2.0 since this class no longer extends
220
+ * {@code AbstractRefreshableConfigApplicationContext}. Use {@link ImportResource}
221
+ * instead.
222
+ */
223
+ @ Deprecated
224
+ public void setConfigLocations (@ Nullable String ... locations ) {
225
+ throw new UnsupportedOperationException ();
226
+ }
227
+
228
+ /**
229
+ * Return an array of resource locations, referring to the XML bean definition files
230
+ * that this context should be built with. Can also include location patterns, which
231
+ * will get resolved via a ResourcePatternResolver.
232
+ * <p>
233
+ * The default implementation returns {@code null}. Subclasses can override this to
234
+ * provide a set of resource locations to load bean definitions from.
235
+ * @return an array of resource locations, or {@code null} if none
236
+ * @see #getResources
237
+ * @see #getResourcePatternResolver
238
+ * @deprecated since 2.2.0 since this class no longer extends
239
+ * {@code AbstractRefreshableConfigApplicationContext}.
240
+ */
241
+ @ Deprecated
242
+ protected String [] getConfigLocations () {
243
+ throw new UnsupportedOperationException ();
244
+ }
245
+
246
+ /**
247
+ * Return the default config locations to use, for the case where no explicit config
248
+ * locations have been specified.
249
+ * <p>
250
+ * The default implementation returns {@code null}, requiring explicit config
251
+ * locations.
252
+ * @return an array of default config locations, if any
253
+ * @see #setConfigLocations
254
+ * @deprecated since 2.2.0 since this class no longer extends
255
+ * {@code AbstractRefreshableConfigApplicationContext}.
256
+ */
257
+ @ Deprecated
258
+ protected String [] getDefaultConfigLocations () {
259
+ throw new UnsupportedOperationException ();
260
+ }
261
+
262
+ /**
263
+ * Resolve the given path, replacing placeholders with corresponding environment
264
+ * property values if necessary. Applied to config locations.
265
+ * @param path the original file path
266
+ * @return the resolved file path
267
+ * @see org.springframework.core.env.Environment#resolveRequiredPlaceholders(String)
268
+ * @deprecated since 2.2.0 since this class no longer extends
269
+ * {@code AbstractRefreshableConfigApplicationContext}.
270
+ */
271
+ @ Deprecated
272
+ protected String resolvePath (String path ) {
273
+ throw new UnsupportedOperationException ();
274
+ }
275
+
276
+ /**
277
+ * Determine whether this context currently holds a bean factory, i.e. has been
278
+ * refreshed at least once and not been closed yet.
279
+ * @return {@code true} if the context holds a bean factory
280
+ * @deprecated since 2.2.0 since this class no longer extends
281
+ * {@code AbstractRefreshableConfigApplicationContext}.
282
+ */
283
+ @ Deprecated
284
+ protected final boolean hasBeanFactory () {
285
+ return true ;
286
+ }
287
+
288
+ /**
289
+ * Create an internal bean factory for this context. Called for each
290
+ * {@link #refresh()} attempt.
291
+ * <p>
292
+ * The default implementation creates a
293
+ * {@link org.springframework.beans.factory.support.DefaultListableBeanFactory} with
294
+ * the {@linkplain #getInternalParentBeanFactory() internal bean factory} of this
295
+ * context's parent as parent bean factory. Can be overridden in subclasses, for
296
+ * example to customize DefaultListableBeanFactory's settings.
297
+ * @return the bean factory for this context
298
+ * @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowBeanDefinitionOverriding
299
+ * @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowEagerClassLoading
300
+ * @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowCircularReferences
301
+ * @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowRawInjectionDespiteWrapping
302
+ * @deprecated since 2.2.0 since this class no longer extends
303
+ * {@code AbstractRefreshableConfigApplicationContext}.
304
+ */
305
+ @ Deprecated
306
+ protected DefaultListableBeanFactory createBeanFactory () {
307
+ throw new UnsupportedOperationException ();
308
+ }
309
+
310
+ /**
311
+ * Customize the internal bean factory used by this context. Called for each
312
+ * {@link #refresh()} attempt.
313
+ * <p>
314
+ * The default implementation applies this context's
315
+ * {@linkplain #setAllowBeanDefinitionOverriding "allowBeanDefinitionOverriding"} and
316
+ * {@linkplain #setAllowCircularReferences "allowCircularReferences"} settings, if
317
+ * specified. Can be overridden in subclasses to customize any of
318
+ * {@link DefaultListableBeanFactory}'s settings.
319
+ * @param beanFactory the newly created bean factory for this context
320
+ * @see DefaultListableBeanFactory#setAllowBeanDefinitionOverriding
321
+ * @see DefaultListableBeanFactory#setAllowCircularReferences
322
+ * @see DefaultListableBeanFactory#setAllowRawInjectionDespiteWrapping
323
+ * @see DefaultListableBeanFactory#setAllowEagerClassLoading
324
+ * @deprecated since 2.2.0 since this class no longer extends
325
+ * {@code AbstractRefreshableConfigApplicationContext}.
326
+ */
327
+ @ Deprecated
328
+ protected void customizeBeanFactory (DefaultListableBeanFactory beanFactory ) {
329
+ throw new UnsupportedOperationException ();
330
+ }
331
+
56
332
}
0 commit comments