From 87b0cea6f6da71b2671a0f5dc6fd9147101e072d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 14 Aug 2013 14:45:03 -0700 Subject: [PATCH] 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 --- .../boot/SpringApplication.java | 19 ++++++++++++------- .../boot/SpringApplicationInitializer.java | 3 ++- ...nfigFileApplicationContextInitializer.java | 2 +- ...DelegateApplicationContextInitializer.java | 1 + .../LoggingApplicationContextInitializer.java | 2 +- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index a8032313343..38ecef34ba3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -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> getSpringFactoriesApplicationContextInitializers() { + protected Collection> 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 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); } } } diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplicationInitializer.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplicationInitializer.java index 493424d9294..38574b94673 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplicationInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplicationInitializer.java @@ -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); } diff --git a/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java b/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java index 2cc0feb1c68..b1874b2bd5a 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java @@ -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()); diff --git a/spring-boot/src/main/java/org/springframework/boot/context/initializer/EnvironmentDelegateApplicationContextInitializer.java b/spring-boot/src/main/java/org/springframework/boot/context/initializer/EnvironmentDelegateApplicationContextInitializer.java index deb2f736fe0..38c1f77bcaa 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/initializer/EnvironmentDelegateApplicationContextInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/initializer/EnvironmentDelegateApplicationContextInitializer.java @@ -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 diff --git a/spring-boot/src/main/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.java b/spring-boot/src/main/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.java index 6f400685750..3790823a205 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.java @@ -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()); }