diff --git a/spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java index 3a37fea1b74..dd116cdf18f 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/AnnotationConfigWebApplicationContext.java +++ b/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"); * you may not use this file except in compliance with the License. @@ -176,6 +176,7 @@ public class AnnotationConfigWebApplicationContext extends AbstractRefreshableWe *
Configuration class bean definitions are registered with generated bean * definition names unless the {@code value} attribute is provided to the stereotype * annotation. + * @param beanFactory the bean factory to load bean definitions into * @see #register(Class...) * @see #scan(String...) * @see #setConfigLocation(String) @@ -185,19 +186,17 @@ public class AnnotationConfigWebApplicationContext extends AbstractRefreshableWe */ @Override protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) { - AnnotatedBeanDefinitionReader reader = new AnnotatedBeanDefinitionReader(beanFactory); - reader.setEnvironment(getEnvironment()); - - ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(beanFactory); - scanner.setEnvironment(getEnvironment()); + AnnotatedBeanDefinitionReader reader = getAnnotatedBeanDefinitionReader(beanFactory); + ClassPathBeanDefinitionScanner scanner = getClassPathBeanDefinitionScanner(beanFactory); BeanNameGenerator beanNameGenerator = getBeanNameGenerator(); - ScopeMetadataResolver scopeMetadataResolver = getScopeMetadataResolver(); if (beanNameGenerator != null) { reader.setBeanNameGenerator(beanNameGenerator); scanner.setBeanNameGenerator(beanNameGenerator); beanFactory.registerSingleton(AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR, beanNameGenerator); } + + ScopeMetadataResolver scopeMetadataResolver = getScopeMetadataResolver(); if (scopeMetadataResolver != null) { reader.setScopeMetadataResolver(scopeMetadataResolver); scanner.setScopeMetadataResolver(scopeMetadataResolver); @@ -248,4 +247,33 @@ public class AnnotationConfigWebApplicationContext extends AbstractRefreshableWe } } + + /** + * Build an {@link AnnotatedBeanDefinitionReader} for the given bean factory. + *
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. + *
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()); + } + }