Spring Boot @Conditional 条件装配
https://www.bilibili.com/video/BV19K4y1L7MT/?p=10
@Conditional 指定满足指定条件,才会将组件装配到容器中,IDEA 中选中 Conditional,按 F4 查看子类
@ConditionalOnBean
容器中存在指定类的组件的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnMissingBean
容器中不存在指定类组件的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnClass
当 classpath 中有指定类的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnMissingClass
当 classpath 中有没有指定类的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnResource
当 classpath 中存在指定资源的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnJava
当运行环境的 Java 版本号满足指定条件的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnWebApplication
当是一个 Web 应用的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnNotWebApplication
当不是一个 Web 应用的时候才会将当前注解的类的组件装配到容器中
@ConditionalOnSingleCandidate
表示当指定Bean在容器中只有一个,或者虽然有多个但是指定首选Bean(primary)的时候
……
测试使用 @ConditionalOnBean 进行条件装配
修改 MyConfig,取消组件 tom 的装配
// @Bean("tom")
@SpringBootApplication(scanBasePackages = "io.github.jihch")
public class MainApplication {
public static void main(String[] args) {
//1、返回 IOC 容器
ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);
//2、查看容器里面的组件
String[] beanDefinitionNames = context.getBeanDefinitionNames();
Arrays.sort(beanDefinitionNames);
for (String name : beanDefinitionNames) {
System.out.println(name);
}
boolean tom = context.containsBean("tom");
System.out.println("容器中 tom 组件:" + tom);
}
}
……
容器中 tom 组件:false