@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) {