@Conditional 有条件的注解
当我们希望某个Bean满足了一定的条件才会被创建的时候,我们就可以使用@Conditional注解(Spring 4引入)来实现这种功能。该注解可以用到带有@Bean注解的方法上,如果给定的条件计算结果为true,就会创建这个bean,否则的话,这个bean会被忽略。
与这相关的注解有
- @ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
- @ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
- @ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
- @ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
- @ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
- @ConditionalOnNotWebApplication(不是web应用)
该注册的bean 实现Condition 返回true 就表示可以创建
public interface Condition {
/**
* Determine if the condition matches. 确定条件是否匹配。
* @param context the condition context
* @param metadata metadata of the {@link org.springframework.core.type.AnnotationMetadata class}
* or {@link org.springframework.core.type.MethodMetadata method} being checked.
* @return {@code true} if the condition matches and the component can be registered
* 如果条件匹配,组件可以注册
* or {@code false} to veto registration. 否决登记。
*/
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
//项目示例
@Bean
@ConditionalOnMissingBean
public LogBuffer logBuffer(){
return new LogBuffer();
}
参考网站地址 https://blog.csdn.net/Zheng_junming/article/details/78230050