43.3 Condition annotations
You almost always want to include one or more @Conditional
annotations on your auto-configuration class. The @ConditionalOnMissingBean
is one common example that is used to allow developers to ‘override’ auto-configuration if they are not happy with your defaults.
Spring Boot includes a number of @Conditional
annotations that you can reuse in your own code by annotating @Configuration
classes or individual @Bean
methods.
43.3.1 Class conditions
The @ConditionalOnClass
and @ConditionalOnMissingClass
annotations allows configuration to be included based on the presence or absence of specific classes. Due to the fact that annotation metadata is parsed using ASM you can actually use the value
attribute to refer to the real class, even though that class might not actually appear on the running application classpath. You can also use the name
attribute if you prefer to specify the class name using a String
value.
43.3.2 Bean conditions
The @ConditionalOnBean
and @ConditionalOnMissingBean
annotations allow a bean to be included based on the presence or absence of specific beans. You can use the value
attribute to specify beans by type, or name
to specify beans by name. The search
attribute allows you to limit the ApplicationContext
hierarchy that should be considered when searching for beans.
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 on auto-configuration classes (since these are guaranteed to load after any user-define beans definitions have been added). |
Note | |
---|---|
@ConditionalOnBean and @ConditionalOnMissingBean do not prevent @Configuration classes from being created. Using these conditions at the class level is equivalent to marking each contained @Bean method with the annotation. |
43.3.3 Property conditions
The @ConditionalOnProperty
annotation allows configuration to be included based on a Spring Environment property. Use the prefix
and name
attributes to specify the property that should be checked. By default any property that exists and is not equal to false
will be matched. You can also create more advanced checks using the havingValue
and matchIfMissing
attributes.
43.3.4 Resource conditions
The @ConditionalOnResource
annotation allows configuration to be included only when a specific resource is present. Resources can be specified using the usual Spring conventions, for example, file:/home/user/test.dat
.
43.3.5 Web application conditions
The @ConditionalOnWebApplication
and @ConditionalOnNotWebApplication
annotations allow configuration to be included depending on whether the application is a 'web application'. A web application is any application that is using a Spring WebApplicationContext
, defines a session
scope or has a StandardServletEnvironment
.
43.3.6 SpEL expression conditions
The @ConditionalOnExpression
annotation allows configuration to be included based on the result of a SpEL expression.