栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

条件注解@ConditionalOnBean失效原因

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

条件注解@ConditionalOnBean失效原因

测试环境(配置类)
@import({User.class,Pet.class})
@Configuration(proxyBeanMethods = true)
public class MyConfig {

    @Bean
    @ConditionalOnBean(name = "cat")     
    public User user(){

        return new User("航书", 12);

    }
    @Bean("cat")  
    public Pet dog(){
        return new Pet("狗");
    }
}

测试代码:

        String[] names = run.getBeanNamesForType(Pet.class);
        for (String name : names) {
            System.out.println(name);
        }
        System.out.println("--------------------------------------------------------");
        boolean cat = run.containsBean("cat");
        System.out.println(cat);
        boolean user2 = run.containsBean("user");
        System.out.println(user2);

打印测试结果:

结果分析:
com.zhmsky.boot.pojo.Pet:这是通过@import自动导入的组件
cat:通过@Bean 注册的组件

IOC容器中包含cat组件,但是没有包含user组件,也就是此时条件配置注解失效

解决办法:
注意条件注解中的条件组件必须要先完成注册,也就也是条件里的判断组件必须要先包含在IOC容器中。

@import({User.class,Pet.class})
@Configuration(proxyBeanMethods = true)   
public class MyConfig {

    @Bean("cat")  
    public Pet dog(){
        return new Pet("狗");
    }
    @Bean  
    @ConditionalOnBean(name = "cat")     
    public User user(){
        return new User("航书", 12);
    }
    
}


此时条件注解生效!
结论:
springboot加载组件有一定的顺序,条件注解里的判断条件一定要先注册(@ConditionalOnBean(name = “cat”) 对应cat组件先完成注册

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490649.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号