@Configuration @Bean @Qualifier

@Configuration
public class OnMissingBean {
    @Bean("notebookPC")
    public Computer computer1(){
        return new Computer("筆記本電腦");
    }

//    @ConditionalOnMissingBean(Computer.class)
    @Bean("reservePC")
    public Computer computer2(){
        return new Computer("備用電腦");
    }
}

test:

@Autowired
@Qualifier(value = "reservePC")
private Computer computer;

 

System.out.println(computer.getNanme());

 

ConditionalOnMissingBean ,ConditionalOnBean

@ConditionalOnBean(Computer2.class)  ,注入條件是  Computer2類型 的bean有被注入

https://blog.csdn.net/xcy1193068639/article/details/81517456
簡單理解就是@ConditionalOnBean是依賴,@ConditionalOnMissBean是排斥,@Conditional爲條件

@ConditionalOnMissingBean
public Computer reservePC(){
    return new Computer("備用電腦");
}

如果@ConditionalOnMissingBean 沒有寫上value,即排斥bean爲本身bean類型 Computer, 

換句話說,ConditionalOnMissingBean 排斥自己(沒有指定bean的情況下標上這個註解),那麼這個類型的bean一定是唯一的,組件下的唯一bean,不存在@qualifier這種事情

 

@Conditional(OnBeanCondition.class)
public @interface ConditionalOnMissingBean {

OnBeanCondition
@Order(Ordered.LOWEST_PRECEDENCE)
class OnBeanCondition extends FilteringSpringBootCondition implements ConfigurationCondition {  
FilteringSpringBootCondition
@Override
public boolean[] match(String[] autoConfigurationClasses, AutoConfigurationMetadata autoConfigurationMetadata) {

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章