Polish documentation on @ConfigurationProperties getters and setters

- Correct typo (coercable -> coercible)
 - Update description to reflect that Spring 4.1.5 supports the
   expansion of array properties and and a test that verifies the
   behaviour
pull/2150/merge
Andy Wilkinson 10 years ago
parent d87bf707a7
commit b8babd4eb4

@ -529,19 +529,16 @@ the configuration of your application. For example:
} }
---- ----
NOTE: The getters and setters are advisable, since binding is via NOTE: The getters and setters are advisable, since binding is via standard Java Beans
standard Java Beans property descriptors, just like in Spring property descriptors, just like in Spring MVC. They are mandatory for immutable types
MVC. They are mandatory for immutable types or those that are directly or those that are directly coercible from `String`. As long as they are initialized,
coercable from `String`. As long as they are initialized maps and maps, collections, and arrays need a getter but not necessarily a setter since they
collections need a getter but not necessarily a setter, for instance, can be mutated by the binder. If there is a setter, Maps, collections, and arrays can
since they can be mutated by the binder. Maps and collections can also be created. Maps and collections can be expanded with only a getter, whereas arrays
be created (if there is a setter) and expanded (in any case), but require a setter. Nested POJO properties can also be created (so a setter is not
arrays can not (so normally arrays need to be bound to a mandatory) if they have a default constructor, or a constructor accepting a single
comma-separated value, but lists can be bound to individual value that can be coerced from String. Some people use Project Lombok to add getters
elements). Nested POJO properties can also be created (so a setter is and setters automatically.
not mandatory) if they have a default constructor, or a constructor
accepting a single value that can be coerced from String. Some people
use Project Lombok to add getters and setters automatically.
When the `@EnableConfigurationProperties` annotation is applied to your `@Configuration`, When the `@EnableConfigurationProperties` annotation is applied to your `@Configuration`,
any beans annotated with `@ConfigurationProperties` will be automatically configured any beans annotated with `@ConfigurationProperties` will be automatically configured

@ -216,6 +216,16 @@ public class ConfigurationPropertiesBindingPostProcessorTests {
equalTo("word".toCharArray())); equalTo("word".toCharArray()));
} }
@Test
public void configurationPropertiesWithArrayExpansion() throws Exception {
this.context = new AnnotationConfigApplicationContext();
EnvironmentTestUtils.addEnvironment(this.context, "test.chars[4]:s");
this.context.register(PropertyWithCharArrayExpansion.class);
this.context.refresh();
assertThat(this.context.getBean(PropertyWithCharArrayExpansion.class).getChars(),
equalTo("words".toCharArray()));
}
@Test @Test
public void notWritablePropertyException() throws Exception { public void notWritablePropertyException() throws Exception {
this.context = new AnnotationConfigApplicationContext(); this.context = new AnnotationConfigApplicationContext();
@ -357,6 +367,23 @@ public class ConfigurationPropertiesBindingPostProcessorTests {
} }
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "test", ignoreUnknownFields = false)
public static class PropertyWithCharArrayExpansion {
private char[] chars = new char[] { 'w', 'o', 'r', 'd' };
public char[] getChars() {
return this.chars;
}
public void setChars(char[] chars) {
this.chars = chars;
}
}
@Configuration @Configuration
@EnableConfigurationProperties @EnableConfigurationProperties
@ConfigurationProperties(prefix = "test") @ConfigurationProperties(prefix = "test")

Loading…
Cancel
Save