Pass args to SpringApplicationInitializers

Change SpringApplicationInitializer interface to include run() args.
Allow initializers to make additional configurations based on the user
supplied arguments.

Issue: #55202588
This commit is contained in:
Phillip Webb 2013-08-14 14:45:03 -07:00 committed by Phillip Webb
parent 76bda7e3b4
commit 87b0cea6f6
5 changed files with 17 additions and 10 deletions

View File

@ -211,8 +211,13 @@ public class SpringApplication {
return true;
}
/**
* Returns {@link ApplicationContextInitializer} loaded via the
* {@link SpringFactoriesLoader}. Subclasses can override this method to modify
* default initializers if necessary.
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private Collection<ApplicationContextInitializer<?>> getSpringFactoriesApplicationContextInitializers() {
protected Collection<ApplicationContextInitializer<?>> getSpringFactoriesApplicationContextInitializers() {
return (Collection) SpringFactoriesLoader.loadFactories(
ApplicationContextInitializer.class,
SpringApplication.class.getClassLoader());
@ -241,14 +246,14 @@ public class SpringApplication {
*/
public ApplicationContext run(String... args) {
// Call all non environment aware initializers very early
callNonEnvironmentAwareSpringApplicationInitializers();
callNonEnvironmentAwareSpringApplicationInitializers(args);
// Create and configure the environment
ConfigurableEnvironment environment = getOrCreateEnvironment();
addPropertySources(environment, args);
// Call all remaining initializers
callEnvironmentAwareSpringApplicationInitializers(environment);
callEnvironmentAwareSpringApplicationInitializers(args, environment);
Set<Object> sources = assembleSources();
Assert.notEmpty(sources, "Sources must not be empty");
if (this.showBanner) {
@ -281,11 +286,11 @@ public class SpringApplication {
return sources;
}
private void callNonEnvironmentAwareSpringApplicationInitializers() {
private void callNonEnvironmentAwareSpringApplicationInitializers(String[] args) {
for (ApplicationContextInitializer<?> initializer : this.initializers) {
if (initializer instanceof SpringApplicationInitializer
&& !(initializer instanceof EnvironmentAware)) {
((SpringApplicationInitializer) initializer).initialize(this);
((SpringApplicationInitializer) initializer).initialize(this, args);
}
}
}
@ -322,13 +327,13 @@ public class SpringApplication {
}
}
private void callEnvironmentAwareSpringApplicationInitializers(
private void callEnvironmentAwareSpringApplicationInitializers(String[] args,
ConfigurableEnvironment environment) {
for (ApplicationContextInitializer<?> initializer : this.initializers) {
if (initializer instanceof SpringApplicationInitializer
&& initializer instanceof EnvironmentAware) {
((EnvironmentAware) initializer).setEnvironment(environment);
((SpringApplicationInitializer) initializer).initialize(this);
((SpringApplicationInitializer) initializer).initialize(this, args);
}
}
}

View File

@ -32,7 +32,8 @@ public interface SpringApplicationInitializer {
/**
* Initialize the application
* @param springApplication the spring application.
* @param args the run arguments
*/
void initialize(SpringApplication springApplication);
void initialize(SpringApplication springApplication, String[] args);
}

View File

@ -105,7 +105,7 @@ public class ConfigFileApplicationContextInitializer implements
* ("spring.main.show_banner=false").
*/
@Override
public void initialize(SpringApplication springApplication) {
public void initialize(SpringApplication springApplication, String[] args) {
if (this.environment instanceof ConfigurableEnvironment) {
ConfigurableEnvironment environment = (ConfigurableEnvironment) this.environment;
load(environment, new DefaultResourceLoader());

View File

@ -45,6 +45,7 @@ public class EnvironmentDelegateApplicationContextInitializer implements
// NOTE: Similar to org.springframework.web.context.ContextLoader
private static final String PROPERTY_NAME = "context.initializer.classes";
private int order = 0;
@Override

View File

@ -81,7 +81,7 @@ public class LoggingApplicationContextInitializer implements
private int order = Integer.MIN_VALUE + 11;
@Override
public void initialize(SpringApplication springApplication) {
public void initialize(SpringApplication springApplication, String[] args) {
if (System.getProperty("PID") == null) {
System.setProperty("PID", getPid());
}