Clarify default value of `ConditionalOnMissingBean` on bean methods
Closes gh-9387
This commit is contained in:
parent
b9a09fcd64
commit
c736a1698b
|
|
@ -30,6 +30,23 @@ import org.springframework.context.annotation.Conditional;
|
||||||
/**
|
/**
|
||||||
* {@link Conditional} that only matches when the specified bean classes and/or names are
|
* {@link Conditional} that only matches when the specified bean classes and/or names are
|
||||||
* already contained in the {@link BeanFactory}.
|
* 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">
|
||||||
|
* @Configuration
|
||||||
|
* public class MyAutoConfiguration {
|
||||||
|
*
|
||||||
|
* @ConditionalOnBean
|
||||||
|
* @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>
|
* <p>
|
||||||
* The condition can only match the bean definitions that have been processed by the
|
* 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
|
* application context so far and, as such, it is strongly recommended to use this
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,24 @@ import org.springframework.context.annotation.Conditional;
|
||||||
* {@link Conditional} that only matches when the specified bean classes and/or names are
|
* {@link Conditional} that only matches when the specified bean classes and/or names are
|
||||||
* not already contained in the {@link BeanFactory}.
|
* not already contained in the {@link BeanFactory}.
|
||||||
* <p>
|
* <p>
|
||||||
|
* When placed on a {@code @Bean} method, the bean class default to the return type of
|
||||||
|
* the factory method:
|
||||||
|
*
|
||||||
|
* <pre class="code">
|
||||||
|
* @Configuration
|
||||||
|
* public class MyAutoConfiguration {
|
||||||
|
*
|
||||||
|
* @ConditionalOnMissingBean
|
||||||
|
* @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
|
* 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
|
* 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
|
* condition on auto-configuration classes only. If a candidate bean may be created by
|
||||||
|
|
|
||||||
|
|
@ -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
|
attribute allows you to limit the `ApplicationContext` hierarchy that should be considered
|
||||||
when searching for beans.
|
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
|
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,
|
conditions are evaluated based on what has been processed so far. For this reason,
|
||||||
we recommend only using `@ConditionalOnBean` and `@ConditionalOnMissingBean` annotations
|
we recommend only using `@ConditionalOnBean` and `@ConditionalOnMissingBean` annotations
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue