Honour custom bean name generator for non-web applications

Closes gh-6160
This commit is contained in:
Andy Wilkinson 2016-06-15 16:53:59 +01:00
parent ed2586d38d
commit 5c43a5b7dd
2 changed files with 20 additions and 10 deletions

View File

@ -72,7 +72,6 @@ import org.springframework.util.ObjectUtils;
import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils;
import org.springframework.util.StopWatch; import org.springframework.util.StopWatch;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.context.ConfigurableWebApplicationContext;
import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.StandardServletEnvironment; import org.springframework.web.context.support.StandardServletEnvironment;
@ -603,15 +602,10 @@ public class SpringApplication {
* @param context the application context * @param context the application context
*/ */
protected void postProcessApplicationContext(ConfigurableApplicationContext context) { protected void postProcessApplicationContext(ConfigurableApplicationContext context) {
if (this.webEnvironment) { if (this.beanNameGenerator != null) {
if (context instanceof ConfigurableWebApplicationContext) { context.getBeanFactory().registerSingleton(
ConfigurableWebApplicationContext configurableContext = (ConfigurableWebApplicationContext) context; AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR,
if (this.beanNameGenerator != null) { this.beanNameGenerator);
configurableContext.getBeanFactory().registerSingleton(
AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR,
this.beanNameGenerator);
}
}
} }
if (this.resourceLoader != null) { if (this.resourceLoader != null) {
if (context instanceof GenericApplicationContext) { if (context instanceof GenericApplicationContext) {

View File

@ -53,6 +53,7 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.AnnotationConfigUtils; import org.springframework.context.annotation.AnnotationConfigUtils;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.SimpleApplicationEventMulticaster; import org.springframework.context.event.SimpleApplicationEventMulticaster;
@ -403,6 +404,21 @@ public class SpringApplicationTests {
sameInstance((Object) beanNameGenerator)); sameInstance((Object) beanNameGenerator));
} }
@Test
public void customBeanNameGeneratorWithNonWebApplication() throws Exception {
TestSpringApplication application = new TestSpringApplication(
ExampleWebConfig.class);
application.setWebEnvironment(false);
BeanNameGenerator beanNameGenerator = new DefaultBeanNameGenerator();
application.setBeanNameGenerator(beanNameGenerator);
this.context = application.run();
verify(application.getLoader()).setBeanNameGenerator(beanNameGenerator);
assertThat(
this.context
.getBean(AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR),
sameInstance((Object) beanNameGenerator));
}
@Test @Test
public void commandLinePropertySource() throws Exception { public void commandLinePropertySource() throws Exception {
SpringApplication application = new SpringApplication(ExampleConfig.class); SpringApplication application = new SpringApplication(ExampleConfig.class);