Skip to content

Commit 20beace

Browse files
committed
AnnotationConfigWebApplicationContext allows for custom AnnotatedBeanDefinitionReader/ClassPathBeanDefinitionScanner
Issue: SPR-9324
1 parent 9973694 commit 20beace

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java

+35-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2014 the original author or authors.
2+
* Copyright 2002-2015 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -176,6 +176,7 @@ public void scan(String... basePackages) {
176176
* <p>Configuration class bean definitions are registered with generated bean
177177
* definition names unless the {@code value} attribute is provided to the stereotype
178178
* annotation.
179+
* @param beanFactory the bean factory to load bean definitions into
179180
* @see #register(Class...)
180181
* @see #scan(String...)
181182
* @see #setConfigLocation(String)
@@ -185,19 +186,17 @@ public void scan(String... basePackages) {
185186
*/
186187
@Override
187188
protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) {
188-
AnnotatedBeanDefinitionReader reader = new AnnotatedBeanDefinitionReader(beanFactory);
189-
reader.setEnvironment(getEnvironment());
190-
191-
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(beanFactory);
192-
scanner.setEnvironment(getEnvironment());
189+
AnnotatedBeanDefinitionReader reader = getAnnotatedBeanDefinitionReader(beanFactory);
190+
ClassPathBeanDefinitionScanner scanner = getClassPathBeanDefinitionScanner(beanFactory);
193191

194192
BeanNameGenerator beanNameGenerator = getBeanNameGenerator();
195-
ScopeMetadataResolver scopeMetadataResolver = getScopeMetadataResolver();
196193
if (beanNameGenerator != null) {
197194
reader.setBeanNameGenerator(beanNameGenerator);
198195
scanner.setBeanNameGenerator(beanNameGenerator);
199196
beanFactory.registerSingleton(AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR, beanNameGenerator);
200197
}
198+
199+
ScopeMetadataResolver scopeMetadataResolver = getScopeMetadataResolver();
201200
if (scopeMetadataResolver != null) {
202201
reader.setScopeMetadataResolver(scopeMetadataResolver);
203202
scanner.setScopeMetadataResolver(scopeMetadataResolver);
@@ -248,4 +247,33 @@ protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) {
248247
}
249248
}
250249

250+
251+
/**
252+
* Build an {@link AnnotatedBeanDefinitionReader} for the given bean factory.
253+
* <p>This should be pre-configured with the {@code Environment} (if desired)
254+
* but not with a {@code BeanNameGenerator} or {@code ScopeMetadataResolver} yet.
255+
* @param beanFactory the bean factory to load bean definitions into
256+
* @since 4.1.9
257+
* @see #getEnvironment()
258+
* @see #getBeanNameGenerator()
259+
* @see #getScopeMetadataResolver()
260+
*/
261+
protected AnnotatedBeanDefinitionReader getAnnotatedBeanDefinitionReader(DefaultListableBeanFactory beanFactory) {
262+
return new AnnotatedBeanDefinitionReader(beanFactory, getEnvironment());
263+
}
264+
265+
/**
266+
* Build a {@link ClassPathBeanDefinitionScanner} for the given bean factory.
267+
* <p>This should be pre-configured with the {@code Environment} (if desired)
268+
* but not with a {@code BeanNameGenerator} or {@code ScopeMetadataResolver} yet.
269+
* @param beanFactory the bean factory to load bean definitions into
270+
* @since 4.1.9
271+
* @see #getEnvironment()
272+
* @see #getBeanNameGenerator()
273+
* @see #getScopeMetadataResolver()
274+
*/
275+
protected ClassPathBeanDefinitionScanner getClassPathBeanDefinitionScanner(DefaultListableBeanFactory beanFactory) {
276+
return new ClassPathBeanDefinitionScanner(beanFactory, true, getEnvironment());
277+
}
278+
251279
}

0 commit comments

Comments
 (0)