diff --git a/org.springframework.core/src/main/java/org/springframework/core/env/AbstractEnvironment.java b/org.springframework.core/src/main/java/org/springframework/core/env/AbstractEnvironment.java index ddd70b27086..823eacc440a 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/env/AbstractEnvironment.java +++ b/org.springframework.core/src/main/java/org/springframework/core/env/AbstractEnvironment.java @@ -192,10 +192,18 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment { return this.propertyResolver.getProperty(key); } + public String getProperty(String key, String defaultValue) { + return this.propertyResolver.getProperty(key, defaultValue); + } + public T getProperty(String key, Class targetType) { return this.propertyResolver.getProperty(key, targetType); } + public T getProperty(String key, Class targetType, T defaultValue) { + return this.propertyResolver.getProperty(key, targetType, defaultValue); + }; + public Class getPropertyAsClass(String key, Class targetType) { return this.propertyResolver.getPropertyAsClass(key, targetType); } diff --git a/org.springframework.core/src/main/java/org/springframework/core/env/PropertyResolver.java b/org.springframework.core/src/main/java/org/springframework/core/env/PropertyResolver.java index 9f1c5bfee0b..c5d2aab7df1 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/env/PropertyResolver.java +++ b/org.springframework.core/src/main/java/org/springframework/core/env/PropertyResolver.java @@ -30,17 +30,44 @@ public interface PropertyResolver { boolean containsProperty(String key); /** - * Return the property value associated with the given key. + * Return the property value associated with the given key, or {@code null} + * if the key cannot be resolved. + * @param key the property name to resolve + * @see #getProperty(String, String) * @see #getProperty(String, Class) + * @see #getRequiredProperty(String) */ String getProperty(String key); + /** + * Return the property value associated with the given key, or + * {@code defaultValue} if the key cannot be resolved. + * @param key the property name to resolve + * @param defaultValue the default value to return if no value is found + * @see #getRequiredProperty(String) + * @see #getProperty(String, Class) + */ + String getProperty(String key, String defaultValue); + /** * Return the property value associated with the given key, or {@code null} * if the key cannot be resolved. + * @param key the property name to resolve + * @param T the expected type of the property value + * @see #getRequiredProperty(String, Class) */ T getProperty(String key, Class targetType); + /** + * Return the property value associated with the given key, or + * {@code defaultValue} if the key cannot be resolved. + * @param key the property name to resolve + * @param T the expected type of the property value + * @param defaultValue the default value to return if no value is found + * @see #getRequiredProperty(String, Class) + */ + T getProperty(String string, Class targetType, T defaultValue); + /** * Convert the property value associated with the given key to a {@code Class} * of type {@code T} or {@code null} if the key cannot be resolved. diff --git a/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java b/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java index 53cd4936c42..9aad2c1cb24 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java +++ b/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java @@ -56,6 +56,11 @@ public class PropertySourcesPropertyResolver extends AbstractPropertyResolver { return this.getProperty(key, String.class); } + public String getProperty(String key, String defaultValue) { + String value = getProperty(key); + return value == null ? defaultValue : value; + } + public T getProperty(String key, Class targetValueType) { boolean debugEnabled = logger.isDebugEnabled(); if (logger.isTraceEnabled()) { @@ -89,6 +94,11 @@ public class PropertySourcesPropertyResolver extends AbstractPropertyResolver { return null; } + public T getProperty(String key, Class targetType, T defaultValue) { + T value = getProperty(key, targetType); + return value == null ? defaultValue : value; + }; + public Class getPropertyAsClass(String key, Class targetValueType) { boolean debugEnabled = logger.isDebugEnabled(); if (logger.isTraceEnabled()) { diff --git a/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesPropertyResolverTests.java b/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesPropertyResolverTests.java index 4a1c8cd513e..c9189008a1f 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesPropertyResolverTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesPropertyResolverTests.java @@ -65,6 +65,13 @@ public class PropertySourcesPropertyResolverTests { assertThat(propertyResolver.getProperty("foo"), is("bar")); } + @Test + public void getProperty_withDefaultValue() { + assertThat(propertyResolver.getProperty("foo", "myDefault"), is("myDefault")); + testProperties.put("foo", "bar"); + assertThat(propertyResolver.getProperty("foo"), is("bar")); + } + @Test public void getProperty_propertySourceSearchOrderIsFIFO() { MutablePropertySources sources = new MutablePropertySources(); @@ -86,6 +93,13 @@ public class PropertySourcesPropertyResolverTests { assertThat(propertyResolver.getProperty("foo"), nullValue()); } + @Test + public void getProperty_withTargetType_andDefaultValue() { + assertThat(propertyResolver.getProperty("foo", Integer.class, 42), equalTo(42)); + testProperties.put("foo", 13); + assertThat(propertyResolver.getProperty("foo", Integer.class, 42), equalTo(13)); + } + @Test public void getProperty_withStringArrayConversion() { testProperties.put("foo", "bar,baz"); @@ -197,7 +211,7 @@ public class PropertySourcesPropertyResolverTests { } @Test - public void resolvePlaceholders_withDefault() { + public void resolvePlaceholders_withDefaultValue() { MutablePropertySources propertySources = new MutablePropertySources(); propertySources.addFirst(new MockPropertySource().withProperty("key", "value")); PropertyResolver resolver = new PropertySourcesPropertyResolver(propertySources); @@ -227,7 +241,7 @@ public class PropertySourcesPropertyResolverTests { } @Test - public void resolveRequiredPlaceholders_withDefault() { + public void resolveRequiredPlaceholders_withDefaultValue() { MutablePropertySources propertySources = new MutablePropertySources(); propertySources.addFirst(new MockPropertySource().withProperty("key", "value")); PropertyResolver resolver = new PropertySourcesPropertyResolver(propertySources);