Browse Source

AnnotationConfigWebApplicationContext allows for custom AnnotatedBeanDefinitionReader/ClassPathBeanDefinitionScanner

Issue: SPR-9324
pull/921/merge
Juergen Hoeller 10 years ago
parent
commit
20beace1bf
  1. 42
      spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java

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

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2014 the original author or authors. * Copyright 2002-2015 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -176,6 +176,7 @@ public class AnnotationConfigWebApplicationContext extends AbstractRefreshableWe
* <p>Configuration class bean definitions are registered with generated bean * <p>Configuration class bean definitions are registered with generated bean
* definition names unless the {@code value} attribute is provided to the stereotype * definition names unless the {@code value} attribute is provided to the stereotype
* annotation. * annotation.
* @param beanFactory the bean factory to load bean definitions into
* @see #register(Class...) * @see #register(Class...)
* @see #scan(String...) * @see #scan(String...)
* @see #setConfigLocation(String) * @see #setConfigLocation(String)
@ -185,19 +186,17 @@ public class AnnotationConfigWebApplicationContext extends AbstractRefreshableWe
*/ */
@Override @Override
protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) { protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) {
AnnotatedBeanDefinitionReader reader = new AnnotatedBeanDefinitionReader(beanFactory); AnnotatedBeanDefinitionReader reader = getAnnotatedBeanDefinitionReader(beanFactory);
reader.setEnvironment(getEnvironment()); ClassPathBeanDefinitionScanner scanner = getClassPathBeanDefinitionScanner(beanFactory);
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(beanFactory);
scanner.setEnvironment(getEnvironment());
BeanNameGenerator beanNameGenerator = getBeanNameGenerator(); BeanNameGenerator beanNameGenerator = getBeanNameGenerator();
ScopeMetadataResolver scopeMetadataResolver = getScopeMetadataResolver();
if (beanNameGenerator != null) { if (beanNameGenerator != null) {
reader.setBeanNameGenerator(beanNameGenerator); reader.setBeanNameGenerator(beanNameGenerator);
scanner.setBeanNameGenerator(beanNameGenerator); scanner.setBeanNameGenerator(beanNameGenerator);
beanFactory.registerSingleton(AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR, beanNameGenerator); beanFactory.registerSingleton(AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR, beanNameGenerator);
} }
ScopeMetadataResolver scopeMetadataResolver = getScopeMetadataResolver();
if (scopeMetadataResolver != null) { if (scopeMetadataResolver != null) {
reader.setScopeMetadataResolver(scopeMetadataResolver); reader.setScopeMetadataResolver(scopeMetadataResolver);
scanner.setScopeMetadataResolver(scopeMetadataResolver); scanner.setScopeMetadataResolver(scopeMetadataResolver);
@ -248,4 +247,33 @@ public class AnnotationConfigWebApplicationContext extends AbstractRefreshableWe
} }
} }
/**
* Build an {@link AnnotatedBeanDefinitionReader} for the given bean factory.
* <p>This should be pre-configured with the {@code Environment} (if desired)
* but not with a {@code BeanNameGenerator} or {@code ScopeMetadataResolver} yet.
* @param beanFactory the bean factory to load bean definitions into
* @since 4.1.9
* @see #getEnvironment()
* @see #getBeanNameGenerator()
* @see #getScopeMetadataResolver()
*/
protected AnnotatedBeanDefinitionReader getAnnotatedBeanDefinitionReader(DefaultListableBeanFactory beanFactory) {
return new AnnotatedBeanDefinitionReader(beanFactory, getEnvironment());
}
/**
* Build a {@link ClassPathBeanDefinitionScanner} for the given bean factory.
* <p>This should be pre-configured with the {@code Environment} (if desired)
* but not with a {@code BeanNameGenerator} or {@code ScopeMetadataResolver} yet.
* @param beanFactory the bean factory to load bean definitions into
* @since 4.1.9
* @see #getEnvironment()
* @see #getBeanNameGenerator()
* @see #getScopeMetadataResolver()
*/
protected ClassPathBeanDefinitionScanner getClassPathBeanDefinitionScanner(DefaultListableBeanFactory beanFactory) {
return new ClassPathBeanDefinitionScanner(beanFactory, true, getEnvironment());
}
} }

Loading…
Cancel
Save