知识点:
1、run.containsBean(); 判断容器中是否有某个组件。
例如:boolean getEmployee = run.containsBean("getEmployee");
2、@ConditionalOnBean(name = "getEmployee") 判断是否存在getEmployee组件,存在才能执行。
用法:一般用于配置类上或者配置类的方法上。
用在方法上:条件为true方法才有效,否则不生效。
用在配置类上:条件为true,配置类中的所有的方法才有效,否则不生效。
3、@ConditionalOnMissingBean(name = "getEmployee")当getEmployee
不存在时,方法才能生效。
用法:一般用于配置类上或者配置类的方法上。

第一步:配置文件 MyConfig 类中的 getUser 方法上加入@ConditionalOnBean(name = "getEmployee1")。当getEmployee1存在时 getUser 才有效。
package com.wzy.boot.config;@Configuration(proxyBeanMethods = false)public class MyConfig {@Beanpublic Employee getEmployee(){return new Employee("工程部",05);}@ConditionalOnBean(name = "getEmployee1")@Beanpublic User getUser(){User user = new User();user.setName("张三");user.setAge(25);user.setEmployee(getEmployee());//通过set方法注入,依赖getEmployee()return user;}}
第二步测试:
package com.wzy.boot;@SpringBootApplication(scanBasePackages = "com.wzy.boot")public class MainApplication {public static void main(String[] args) {//1.获取IOC容器ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);//2.查看容器里的组件String[] names = run.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}boolean getEmployee = run.containsBean("getUser");System.out.println(getEmployee);//false}}
