知识点:
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 {
@Bean
public Employee getEmployee(){
return new Employee("工程部",05);
}
@ConditionalOnBean(name = "getEmployee1")
@Bean
public 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
}
}