@ConditionalOnBean使用:
package com.atguigu.boot.Configuration;
import ch.qos.logback.core.db.DBHelper;
import com.atguigu.boot.bean.Pet;
import com.atguigu.boot.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
//告诉Spring这是一个配置文件
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = true)
public class myconfig {
// 方法名默认就是组件名 也可以自己在@Bean后面自定义也行
// 方法返回类型就是组件类型
// 返回值就是组件在容器中的类型
@Bean("tom")
public Pet cat(){
return new Pet("cat");
}
@Bean
@ConditionalOnBean(name = "tom")
public User user01(){
User zhaansgasn = new User("zhaansgasn", 10);
zhaansgasn.setPet(cat());
return zhaansgasn;
}
}
boolean user01 = run.containsBean("user01");
System.out.println("user01组件"+user01);
boolean tom = run.containsBean("tom");
System.out.println("tom组件"+tom);
这边自己要注意判断顺序
这边就是说保证先检查前面的组件中有没有命名为tom的组件
如果有,再执行user01
前面没有或者顺序错误
程序执行到user01组件的时候,组件tom找不到,所以user01最后不执行
总结:
就是说你自己哪个方法要放在前面进行判断
你就把哪个方法放在最前面
后面的方法根据这个方法是是否存在再进行下一步的操作