diff --git a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index edaef7f822..20f3ebc984 100644 --- a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -780,9 +780,8 @@ the configuration of your application. For example: [source,java,indent=0] ---- - @Component @ConfigurationProperties(prefix="connection") - public class ConnectionSettings { + public class ConnectionProperties { private String username; @@ -806,9 +805,49 @@ String. Some people use Project Lombok to add getters and setters automatically. TIP: See also the <>. -The `@EnableConfigurationProperties` annotation is automatically applied to your project -so that any beans annotated with `@ConfigurationProperties` will be configured from the -`Environment` properties. This style of configuration works particularly well with the +You also need to list the properties classes to register in the +`@EnableConfigurationProperties` annotation: + +[source,java,indent=0] +---- + @Configuration + @EnableConfigurationProperties(ConnectionProperties.class) + public class MyConfiguration { + } +---- + +[NOTE] +==== +When `@ConfigurationProperties` bean is registered that way, the bean will have a +conventional name: `-`, where `` is the environment key prefix +specified in the `@ConfigurationProperties` annotation and the fully qualified +name of the bean. If the annotation does not provide any prefix, only the fully qualified +name of the bean is used. + +The bean name in the example above will be `connection-com.example.ConnectionProperties`, +assuming that `ConnectionProperties` sits in the `com.example` package. +==== + +Even if the configuration above will create a regular bean for `ConnectionProperties`, we +recommend that `@ConfigurationProperties` only deal with the environment and in particular +does not inject other beans from the context. Having said that, The +`@EnableConfigurationProperties` annotation is _also_ automatically applied to your project +so that any _existing_ bean annotated with `@ConfigurationProperties` will be configured +from the `Environment` properties. You could shortcut `MyConfiguration` above by making +sure `ConnectionProperties` is a already a bean: + +[source,java,indent=0] +---- + @Component + @ConfigurationProperties(prefix="connection") + public class ConnectionProperties { + + // ... getters and setters + + } +---- + +This style of configuration works particularly well with the `SpringApplication` external YAML configuration: [source,yaml,indent=0] @@ -830,8 +869,12 @@ as any other bean. @Service public class MyService { + private final ConnectionProperties connection; + @Autowired - private ConnectionSettings connection; + public MyService(ConnectionProperties connection) { + this.connection = connection; + } //... @@ -844,30 +887,6 @@ as any other bean. } ---- -It is also possible to shortcut the registration of `@ConfigurationProperties` bean -definitions by simply listing the properties classes directly in the -`@EnableConfigurationProperties` annotation: - -[source,java,indent=0] ----- - @Configuration - @EnableConfigurationProperties(ConnectionSettings.class) - public class MyConfiguration { - } ----- - -[NOTE] -==== -When `@ConfigurationProperties` bean is registered that way, the bean will have a -conventional name: `-`, where `` is the environment key prefix -specified in the `@ConfigurationProperties` annotation and the fully qualified -name of the bean. If the annotation does not provide any prefix, only the fully qualified -name of the bean is used. - -The bean name in the example above will be `connection-com.example.ConnectionSettings`, -assuming that `ConnectionSettings` sits in the `com.example` package. -==== - TIP: Using `@ConfigurationProperties` also allows you to generate meta-data files that can be used by IDEs. See the <> appendix for details. @@ -892,7 +911,7 @@ its bean registration: ---- Any property defined with the `foo` prefix will be mapped onto that `FooComponent` bean -in a similar manner as the `ConnectionSettings` example above. +in a similar manner as the `ConnectionProperties` example above. @@ -908,9 +927,8 @@ For example, given the following `@ConfigurationProperties` class: [source,java,indent=0] ---- - @Component @ConfigurationProperties(prefix="person") - public class ConnectionSettings { + public class OwnerProperties { private String firstName; @@ -971,9 +989,8 @@ annotations to your `@ConfigurationProperties` class: [source,java,indent=0] ---- - @Component @ConfigurationProperties(prefix="connection") - public class ConnectionSettings { + public class ConnectionProperties { @NotNull private InetAddress remoteAddress; @@ -985,13 +1002,12 @@ annotations to your `@ConfigurationProperties` class: In order to validate values of nested properties, you must annotate the associated field as `@Valid` to trigger its validation. For example, building upon the above -`ConnectionSettings` example: +`ConnectionProperties` example: [source,java,indent=0] ---- - @Component @ConfigurationProperties(prefix="connection") - public class ConnectionSettings { + public class ConnectionProperties { @NotNull @Valid