Spring Boot基于特定条件创建Bean例子 : ConditionalOnMissingBean

结合使用注解@ConditionalOnMissingBean和@Bean,可以做到只有特定名称或者类型的Bean不存在于BeanFactory中时才创建某个Bean :

@Configuration
public class ConditionalOnMissingBeanConfig {

    @Bean
    public A beanA(){
        return new A(); // 无条件定义一个bean : beanA
    }

    @Bean
    @ConditionalOnMissingBean(name="beanA")
    public B beanB(){
        // 如果 beanFactory 中存在一个名称为 beanA 的 bean,才定义bean : beanB;
        // 因为上面的方法已经定义了一个 beanA,所以这里 beanB定义并不会发生。
        return new B(); 
    }

    @Bean
    @ConditionalOnMissingBean(name="beanD")
    public C beanC(){
        // 如果 beanFactory 中存在一个名称为 beanD的 bean,才定义bean : beanC;     
        return new C(); 
    }

}

ConditionalOnMissingBean注解条件匹配所检查的bean定义仅限于spring boot 执行过程中application context截至当前所处理的那些bean,因此,强烈建议仅将 ConditionalOnMissingBean 使用于 auto-configuration 类。另外,如果一个候选 bean 需要在另外一个 auto-configuration 完成之后创建(或者不创建),那么需要确保该 ConditionalOnMissingBean 在那个 auto-configuration 完成之后执行。

注解 ConditionalOnMissingBean 的官方API文档

猜你喜欢

转载自blog.csdn.net/andy_zhang2007/article/details/81285130
今日推荐