学习
实践
活动
专区
工具
TVP
写文章

SpringBoot基础篇Bean之@ConditionalOnBean与@ConditionalOnClass

除了前面一篇博文中介绍的通过@Conditional注解配合Condition接口的实现之外,还提供了更多简化的注解使用方式,省略了自己实现Condtion接口,本篇博文主要介绍下面几个常用的注解使用方式 @ConditionalOnBean @ConditionalOnBean 要求bean存在时,才会创建这个bean;如我提供了一个bean名为RedisOperBean,用于封装redis相关的操作;但是我这个bean需要依赖restTemplate 这个bean,只有当应用引入了redis的相关依赖,并存在RestTemplate这个bean的时候,我这个bean才会生效 假设bean的定义如下 @Component @ConditionalOnBean Retention(RetentionPolicy.RUNTIME) @Documented @Conditional(OnBeanCondition.class) public @interface ConditionalOnBean DependedBean(); } /** * 只有当DependedBean 存在时,才会创建bean: `LoadIfBeanExist` * * @return */ @Bean @ConditionalOnBean

13.7K12
  • 广告
    关闭

    新年·上云精选

    热卖云产品年终特惠,2核2G轻量应用服务器7.33元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SpringBoot自动装配源码笔记

    1.1.1 @ConditionalOnBean @ConditionalOnBean注解的作用是当注解参数对应的bean不存在时,则其标注的Bean也不会被注册。 此时再运行一下项目 此时发现user bean不存在(因为@Bean注解已经被注释掉了),并且book bean也不存在(@ConditionalOnBean注解的作用) 扩展: 使用@ConditionalOnBean 但这是如果调换一下两个bean的声明顺序,如下 此时得到如下结果: 可以看到book bean不能被创建,因为它是从上往下顺序注册到容器的的,在注册book时user bean还没被注册,@ConditionalOnBean 1.1.2 @ConditionalOnMissingBean 作用和@ConditionalOnBean相反 1.2. 配置绑定 1.2.1. 这里打开CacheAutoConfiguration类查看 可以看到这里使用了@ConditionalOnClass,@ConditionalOnBean,@ConditionalOnMissingBean

    6420

    助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoot源码(三)

    同时是OnBeanCondition是@ConditionalOnBean,@ConditionalOnSingleCandidate和ConditionalOnMissingBean的条件类。 注解的情况 if (metadata.isAnnotated(ConditionalOnBean.class.getName())) { // 将@ConditionalOnBean注解属性封装进 BeanSearchSpec对象中 // 注意BeanSearchSpec是一个静态内部类,用来存储@ConditionalOnBean和@ConditionalOnMissingBean注解的属性值 BeanSearchSpec spec = new BeanSearchSpec(context, metadata, ConditionalOnBean.class); // 现在我们只看针对@ConditionalOnBean注解的处理逻辑,从上面代码中可以看到若配置类(metadata)标注@ConditionalOnBean注解的话,主要做了以下事情: 将该注解属性提取出来封装进

    71100

    扫码关注腾讯云开发者

    领取腾讯云代金券