Clarify default value of ConditionalOnMissingBean on bean methods

Closes gh-9387
This commit is contained in:
Stephane Nicoll 2017-06-02 14:55:58 +02:00
parent b9a09fcd64
commit c736a1698b
3 changed files with 53 additions and 0 deletions

View File

@ -30,6 +30,23 @@ import org.springframework.context.annotation.Conditional;
/**
* {@link Conditional} that only matches when the specified bean classes and/or names are
* already contained in the {@link BeanFactory}.
* When placed on a {@code @Bean} method, the bean class default to the return type of
* the factory method:
*
* <pre class="code">
* &#064;Configuration
* public class MyAutoConfiguration {
*
* &#064;ConditionalOnBean
* &#064;Bean
* public MyService myService() {
* ...
* }
*
* }</pre>
* <p>
* In the sample above the condition will match if a bean of type {@code MyService} is
* already contained in the {@link BeanFactory}.
* <p>
* The condition can only match the bean definitions that have been processed by the
* application context so far and, as such, it is strongly recommended to use this

View File

@ -31,6 +31,24 @@ import org.springframework.context.annotation.Conditional;
* {@link Conditional} that only matches when the specified bean classes and/or names are
* not already contained in the {@link BeanFactory}.
* <p>
* When placed on a {@code @Bean} method, the bean class default to the return type of
* the factory method:
*
* <pre class="code">
* &#064;Configuration
* public class MyAutoConfiguration {
*
* &#064;ConditionalOnMissingBean
* &#064;Bean
* public MyService myService() {
* ...
* }
*
* }</pre>
* <p>
* In the sample above the condition will match if no bean of type {@code MyService} is
* already contained in the {@link BeanFactory}.
* <p>
* The condition can only match the bean definitions that have been processed by the
* application context so far and, as such, it is strongly recommended to use this
* condition on auto-configuration classes only. If a candidate bean may be created by

View File

@ -6231,6 +6231,24 @@ attribute to specify beans by type, or `name` to specify beans by name. The `sea
attribute allows you to limit the `ApplicationContext` hierarchy that should be considered
when searching for beans.
When placed on a `@Bean` method, the target type defaults to the return type of the
method, for instance:
[source,java,indent=0]
----
@Configuration
public class MyAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public MyService myService() { ... }
}
----
In the example above, the `myService` bean is going to be created if no bean of type
`MyService` is already contained in the `ApplicationContext`.
TIP: You need to be very careful about the order that bean definitions are added as these
conditions are evaluated based on what has been processed so far. For this reason,
we recommend only using `@ConditionalOnBean` and `@ConditionalOnMissingBean` annotations