一个组件带上@Conditional
注解或者实现了Condition
接口都标识着该组件只在特定条件满足的情况下,才会注册(eligible for registration)。
注意:
@Conditional
注解不可继承。
如果一个@Configuration
类被标注为@Conditional
,则该类的所有的@Bean
方法, @Import
注解,和@ComponentScan
注解,都依从于该条件。
示例:
条件类
1 | public class MyCondition implements Condition |
配置类
1 | import java.io.Serializable; |
@Conditional(MyCondition.class)
这句代码可以标注在类上面,表示该类下面的所有@Bean
都会启用配置,也可以标注在方法上面,只是对该方法启用配置
除了自己自定义Condition之外,Spring还提供了很多Condition给我们用:
@ConditionalOnBean
(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)@ConditionalOnClass
(某个class位于类路径上,才会实例化一个Bean)@ConditionalOnExpression
(当表达式为true的时候,才会实例化一个Bean)@ConditionalOnMissingBean
(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)@ConditionalOnMissingClass
(某个class类路径上不存在的时候,才会实例化一个Bean)@ConditionalOnNotWebApplication
(不是web应用)