diff --git a/spring-boot/src/main/java/org/springframework/boot/context/initializer/FileEncodingApplicationContextInitializer.java b/spring-boot/src/main/java/org/springframework/boot/context/listener/FileEncodingApplicationListener.java similarity index 81% rename from spring-boot/src/main/java/org/springframework/boot/context/initializer/FileEncodingApplicationContextInitializer.java rename to spring-boot/src/main/java/org/springframework/boot/context/listener/FileEncodingApplicationListener.java index 2c179f60c5c..134783295b3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/initializer/FileEncodingApplicationContextInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/listener/FileEncodingApplicationListener.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.boot.context.initializer; +package org.springframework.boot.context.listener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.boot.SpringApplicationEnvironmentAvailableEvent; import org.springframework.boot.bind.RelaxedPropertyResolver; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.ApplicationListener; /** - * An {@link ApplicationContextInitializer} halts application startup if the system file + * An {@link ApplicationListener}that halts application startup if the system file * encoding does not match an expected value set in the environment. By default has no * effect, but if you set spring.mandatory_file_encoding (or some camelCase * or UPPERCASE variant of that) to the name of a character encoding (e.g. "UTF-8") then @@ -41,16 +41,15 @@ import org.springframework.context.ConfigurableApplicationContext; * * @author Dave Syer */ -public class FileEncodingApplicationContextInitializer implements - ApplicationContextInitializer { +public class FileEncodingApplicationListener implements + ApplicationListener { - private static Log logger = LogFactory - .getLog(FileEncodingApplicationContextInitializer.class); + private static Log logger = LogFactory.getLog(FileEncodingApplicationListener.class); @Override - public void initialize(final ConfigurableApplicationContext context) { + public void onApplicationEvent(SpringApplicationEnvironmentAvailableEvent event) { RelaxedPropertyResolver resolver = new RelaxedPropertyResolver( - context.getEnvironment(), "spring."); + event.getEnvironment(), "spring."); if (resolver.containsProperty("mandatoryFileEncoding")) { final String encoding = System.getProperty("file.encoding"); final String desired = resolver.getProperty("mandatoryFileEncoding"); diff --git a/spring-boot/src/main/resources/META-INF/spring.factories b/spring-boot/src/main/resources/META-INF/spring.factories index 991eae80d13..a05fb79e12c 100644 --- a/spring-boot/src/main/resources/META-INF/spring.factories +++ b/spring-boot/src/main/resources/META-INF/spring.factories @@ -1,11 +1,11 @@ # Application Context Initializers org.springframework.context.ApplicationContextInitializer=\ -org.springframework.boot.context.initializer.FileEncodingApplicationContextInitializer,\ org.springframework.boot.context.initializer.ContextIdApplicationContextInitializer,\ org.springframework.boot.context.initializer.EnvironmentDelegateApplicationContextInitializer # Application Listeners org.springframework.context.ApplicationListener=\ +org.springframework.boot.context.listener.FileEncodingApplicationListener,\ org.springframework.boot.context.listener.VcapApplicationListener,\ org.springframework.boot.context.listener.ConfigFileApplicationListener,\ org.springframework.boot.context.listener.LoggingApplicationListener,\ diff --git a/spring-boot/src/test/java/org/springframework/boot/TestUtils.java b/spring-boot/src/test/java/org/springframework/boot/TestUtils.java index fb7e496459e..60e06b06a03 100644 --- a/spring-boot/src/test/java/org/springframework/boot/TestUtils.java +++ b/spring-boot/src/test/java/org/springframework/boot/TestUtils.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.Map; import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; /** @@ -31,6 +32,10 @@ public abstract class TestUtils { public static void addEnviroment(ConfigurableApplicationContext context, String... pairs) { + addEnviroment(context.getEnvironment(), pairs); + } + + public static void addEnviroment(ConfigurableEnvironment enviroment, String... pairs) { Map map = new HashMap(); for (String pair : pairs) { int index = pair.indexOf(":"); @@ -38,8 +43,7 @@ public abstract class TestUtils { String value = index > 0 ? pair.substring(index + 1) : ""; map.put(key.trim(), value.trim()); } - context.getEnvironment().getPropertySources() - .addFirst(new MapPropertySource("test", map)); + enviroment.getPropertySources().addFirst(new MapPropertySource("test", map)); } } diff --git a/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java b/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java index 91e1992a84b..857684bb191 100644 --- a/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java @@ -176,7 +176,7 @@ public class SpringApplicationBuilderTests { SpringApplicationBuilder application = new SpringApplicationBuilder( ExampleConfig.class).web(false); this.context = application.run(); - assertEquals(3, application.application().getInitializers().size()); + assertEquals(2, application.application().getInitializers().size()); } @Test @@ -184,7 +184,7 @@ public class SpringApplicationBuilderTests { SpringApplicationBuilder application = new SpringApplicationBuilder( ExampleConfig.class).child(ChildConfig.class).web(false); this.context = application.run(); - assertEquals(4, application.application().getInitializers().size()); + assertEquals(3, application.application().getInitializers().size()); } @Test @@ -198,7 +198,7 @@ public class SpringApplicationBuilderTests { } }); this.context = application.run(); - assertEquals(4, application.application().getInitializers().size()); + assertEquals(3, application.application().getInitializers().size()); } @Configuration diff --git a/spring-boot/src/test/java/org/springframework/boot/context/initializer/FileEncodingApplicationContextInitializerTests.java b/spring-boot/src/test/java/org/springframework/boot/context/initializer/FileEncodingApplicationContextInitializerTests.java deleted file mode 100644 index 43a2def5678..00000000000 --- a/spring-boot/src/test/java/org/springframework/boot/context/initializer/FileEncodingApplicationContextInitializerTests.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2012-2013 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.context.initializer; - -import org.junit.Assume; -import org.junit.Before; -import org.junit.Test; -import org.springframework.boot.TestUtils; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.StaticApplicationContext; - -/** - * @author Dave Syer - */ -public class FileEncodingApplicationContextInitializerTests { - - private FileEncodingApplicationContextInitializer initializer = new FileEncodingApplicationContextInitializer(); - private ConfigurableApplicationContext context; - - @Before - public void init() { - this.context = new StaticApplicationContext(); - } - - @Test(expected = IllegalStateException.class) - public void testIllegalState() { - TestUtils.addEnviroment(this.context, "spring.mandatory_file_encoding:FOO"); - this.initializer.initialize(this.context); - } - - @Test - public void testSunnyDayNothingMandated() { - this.initializer.initialize(this.context); - } - - @Test - public void testSunnyDayMandated() { - Assume.assumeNotNull(System.getProperty("file.encoding")); - TestUtils.addEnviroment(this.context, - "spring.mandatory_file_encoding:" + System.getProperty("file.encoding")); - this.initializer.initialize(this.context); - } - -} diff --git a/spring-boot/src/test/java/org/springframework/boot/context/listener/FileEncodingApplicationListenerTests.java b/spring-boot/src/test/java/org/springframework/boot/context/listener/FileEncodingApplicationListenerTests.java new file mode 100644 index 00000000000..ec977dd76bc --- /dev/null +++ b/spring-boot/src/test/java/org/springframework/boot/context/listener/FileEncodingApplicationListenerTests.java @@ -0,0 +1,56 @@ +/* + * Copyright 2012-2013 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.context.listener; + +import org.junit.Assume; +import org.junit.Test; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.SpringApplicationEnvironmentAvailableEvent; +import org.springframework.boot.TestUtils; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.StandardEnvironment; + +/** + * @author Dave Syer + */ +public class FileEncodingApplicationListenerTests { + + private FileEncodingApplicationListener initializer = new FileEncodingApplicationListener(); + private ConfigurableEnvironment environment = new StandardEnvironment(); + private SpringApplicationEnvironmentAvailableEvent event = new SpringApplicationEnvironmentAvailableEvent( + new SpringApplication(), this.environment, new String[0]); + + @Test(expected = IllegalStateException.class) + public void testIllegalState() { + TestUtils.addEnviroment(this.environment, "spring.mandatory_file_encoding:FOO"); + this.initializer.onApplicationEvent(this.event); + } + + @Test + public void testSunnyDayNothingMandated() { + this.initializer.onApplicationEvent(this.event); + } + + @Test + public void testSunnyDayMandated() { + Assume.assumeNotNull(System.getProperty("file.encoding")); + TestUtils.addEnviroment(this.environment, "spring.mandatory_file_encoding:" + + System.getProperty("file.encoding")); + this.initializer.onApplicationEvent(this.event); + } + +}