Ensure ApplicationContextInitializers are not overwritten

SpringApplicationBuilder has to be careful not to overwrite the
default initializers if user calls its initializers() method.

Fixes gh-120.
This commit is contained in:
Dave Syer 2013-11-18 09:59:11 +00:00
parent 79495e7ad9
commit 71fd474ed2
2 changed files with 17 additions and 1 deletions

View File

@ -481,7 +481,8 @@ public class SpringApplicationBuilder {
target.addAll(Arrays.asList(initializers));
}
this.initializers = target;
this.application.setInitializers(target);
this.application.addInitializers(target
.toArray(new ApplicationContextInitializer[0]));
}
}

View File

@ -23,6 +23,7 @@ import java.util.Collections;
import org.junit.After;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;
@ -178,6 +179,20 @@ public class SpringApplicationBuilderTests {
assertEquals(7, application.application().getInitializers().size());
}
@Test
public void initializersIncludeDefaults() throws Exception {
SpringApplicationBuilder application = new SpringApplicationBuilder(
ExampleConfig.class).web(false).initializers(
new ApplicationContextInitializer<ConfigurableApplicationContext>() {
@Override
public void initialize(
ConfigurableApplicationContext applicationContext) {
}
});
this.context = application.run();
assertEquals(8, application.application().getInitializers().size());
}
@Configuration
static class ExampleConfig {