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