首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

@ConditionalOnBean未检测到bean,即使它已创建

@ConditionalOnBean是Spring框架中的一个注解,用于在特定的bean存在时才执行某个方法或加载某个配置。当使用@ConditionalOnBean注解时,如果未检测到指定的bean,即使该bean已经被创建,相关的方法或配置也不会被执行或加载。

该注解可以用于控制应用程序的行为,根据特定的条件来决定是否执行某些操作。它可以帮助开发人员在特定的环境下灵活地配置和管理应用程序的行为。

使用@ConditionalOnBean注解时,需要指定一个或多个要检测的bean的类型或名称。如果指定的bean存在于应用程序的上下文中,则相关的方法或配置会被执行或加载。如果指定的bean不存在,则相关的方法或配置会被忽略。

@ConditionalOnBean注解的应用场景包括:

  1. 条件性加载配置:可以根据特定的bean是否存在来加载不同的配置文件,从而实现不同环境下的配置切换。
  2. 条件性执行方法:可以根据特定的bean是否存在来决定是否执行某个方法,从而实现不同环境下的方法调用。
  3. 条件性加载组件:可以根据特定的bean是否存在来加载不同的组件,从而实现不同环境下的组件切换。

腾讯云提供了一系列与云计算相关的产品,以下是一些推荐的产品和产品介绍链接地址:

  1. 云服务器(CVM):提供弹性计算能力,支持多种操作系统和应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(CDB):提供高可用、可扩展的MySQL数据库服务。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  3. 云原生容器服务(TKE):提供高度可扩展的容器化应用管理平台。详情请参考:https://cloud.tencent.com/product/tke
  4. 人工智能平台(AI Lab):提供丰富的人工智能算法和模型,支持图像识别、语音识别、自然语言处理等应用。详情请参考:https://cloud.tencent.com/product/ailab
  5. 物联网开发平台(IoT Explorer):提供全面的物联网解决方案,支持设备接入、数据管理和应用开发。详情请参考:https://cloud.tencent.com/product/iothub

请注意,以上推荐的产品仅为示例,并非广告推广。在实际应用中,您可以根据具体需求选择适合的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Spring Boot 源码学习】OnBeanCondition 详解

如果存在 @ConditionalOnBean,则创建一个条件规范 Spec 对象,该类是从底层的注解中提取的搜索规范;接着,调用 getMatchingBeans 方法,并从上下文【context】中获取与条件规范...;如果没有匹配的 bean,则返回表示匹配条件的 ConditionOutcome 对象【其中记录了 没有找到任何 bean 的信息】;否则,获取匹配的所有 bean 名称并存储在 allBeans...对象【其中记录了 一个首选 bean 也没有找到 的信息】;如果首选 bean 名称列表包含多个 bean,则返回表示匹配条件的 ConditionOutcome 对象【其中记录了 找到了多个首选...方法,创建一个描述条件不匹配原因的字符串并返回;返回一个表示匹配条件的 ConditionOutcome 对象【其中包含了条件规范的消息以及不匹配的原因】;否则,更新匹配消息,并记录 找不到指定类型的...名称,如果它不在被忽略类型的集合中,并且它在 bean 工厂中存在,就记录匹配的名称;否则,记录匹配的名称。

15631
  • Spring高手之路9——掌握Spring条件装配的秘密武器

    register方法是将配置类注册到Spring的应用上下文中,并不会立即创建配置类中声明的bean,这些bean创建过程是在上下文的refresh阶段中进行的。...这可能会导致Bean创建顺序与它们在配置类中定义的顺序不同。Bean的生命周期和作用域:例如,如果一个Bean是单例的(默认的作用域),那么通常会在容器启动时就被创建。...但如果它是原型的,那么只有在被需要时才会被创建。条件注解:像@Profile和@Conditional这样的条件注解也可能影响Bean创建。如果条件未满足,对应的Bean将不会被创建。  ...具体来说:@ConditionalOnBean:当 Spring 容器中存在指定类型的 Bean 时,当前被标注的 Bean 才会被创建。...即使 Librarian 类的定义被 @Component 注解修饰并通过组件扫描注册到 Spring 容器,Spring 仍然可以正确地处理依赖关系,依赖的是 Bean 的定义,而不是 Bean 的实例化

    29850

    SpringBoot实战 - 创建自己的auto-configuration

    3.2 Bean条件 @ConditionalOnBean和@ConditionalOnMissingBean注解可以根据特定类是否存在决定bean的包含,你可以使用value属性指定beans(by...出于这个原因,我们推荐在自动配置类上只使用@ConditionalOnBean和@ConditionalOnMissingBean注解(即使保证它们在其他用户定义的beans后加载)。...注 @ConditionalOnBean和@ConditionalOnMissingBean不会阻止@Configuration类的创建,在类级别使用那些conditions跟使用注解标记每个@Bean...43.4.3 Starter模块 starter模块实际是一个空jar,的目的是提供使用该library所需的必要依赖。...不要对添加你的starter的项目做任何假设,如果你正在自动配置的library需要其他starters,一定要提到

    1.1K10

    为什么@Conditional会失效?

    @ConditionalOnBean:当容器中存在指定的 Bean 时,条件才会成立。 @ConditionalOnMissingBean:当容器中不存在指定的 Bean 时,条件才会成立。...configurationModel) { loadBeanDefinitionsForConfigurationClass(configClass, trackedConditionEvaluator); } } 此处创建了...,否则跳过注册 这里的关键点是condition.matches方法,前边我们使用的是@ConditionalOnBean,所以此处的Condition是OnBeanCondition,我们看一下的matches...对应的Bean没有注册进来,原因就是执行普通@Configuration注解标注类以及内部@Bean的时候,执行条件注解逻辑,从容器中没有找到@ConditionalOnBean依赖类的BeanDefination...方法移动到自动装配类中 将有 @ConditionalOnBean 注解的 @Bean 方法移到自动装配类中,这样就可以保证自动装配类中的 Bean 先被加载和注册,满足 @ConditionalOnBean

    53520

    SpringBoot自动装配源码笔记

    1.1.1 @ConditionalOnBean @ConditionalOnBean注解的作用是当注解参数对应的bean不存在时,则其标注的Bean也不会被注册。...具体示例: 首先创建一个SpringBoot项目,加入Spring Web依赖,然后创建对应的类,具体目录如下(红色框为修改或添加部分): com.doper.pojo.User.java package...此时只是Config类下的一个普通方法,并且在book()方法上面增加@ConditionalOnBean(name = "user")。...此时再运行一下项目 此时发现user bean不存在(因为@Bean注解已经被注释掉了),并且book bean也不存在(@ConditionalOnBean注解的作用) 扩展: 使用@ConditionalOnBean...但这是如果调换一下两个bean的声明顺序,如下 此时得到如下结果: 可以看到book bean不能被创建,因为它是从上往下顺序注册到容器的的,在注册book时user bean还没被注册,@ConditionalOnBean

    27520

    Spring Boot Admin2 AdminServerAutoConfiguration详解

    @Configuration(proxyBeanMethods = false) @Conditional(SpringBootAdminServerEnabledCondition.class) @ConditionalOnBean...做为条件判断是否加载该类,SpringBootAdminServerEnabledCondition中根据spring.boot.admin.server.enabled是否为true来处理,优先级最高 @ConditionalOnBean...instanceIdGenerator) { return new InstanceRegistry(instanceRepository, instanceIdGenerator); } 该部分创建了一个用于管理实例注册的...instanceEventPublisher) { return new ApplicationRegistry(instanceRegistry, instanceEventPublisher); } 该部分创建一个用于管理所有注册的应用...(); } 该部分创建了一个根据实例健康URL地址来生成实例ID的Bean @Bean @ConditionalOnMissingBean public StatusUpdater statusUpdater

    33230

    Spring Boot 自定义starter

    一、简介 SpringBoot 用起来方便,默认集成了 Java 的主流框架。这也是 SpringBoot 的一大特色,使用方便,需要什么框架或者技术,只需要引入对应的 starter 即可。...即使官方集成了很多主流框架,但SpringBoot官方也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对SpringBoot的使用。...autoconfigurer模块的依赖,以及一些其它的依赖 (PS:如果你不需要区分这两个概念的话,也可以将自动配置代码模块与依赖管理模块合并成一个模块) 简而言之,starter应该提供使用该库所需的一切 1、创建两个工程...@Scope("prototype") @ConditionalOnBean(ObjectMapper.class) public FactoryBean...@Scope("prototype") @ConditionalOnBean(Gson.class) public FactoryBean<GsonTester

    1K50

    SpringBoot--底层注解

    方法被调用多少次返回的组件都是单实例的(不写默认为true) Lite(proxyBeanMethods = false):每个@Bean方法被调用多少次返回的组件都是新创建的 @Bean 给容器中注册组件...Conditional又派生了许多注解,如下图: 下面以@ConditionalOnBean为例: 编写配置类MyConfig: import boot.bean.Pet; import boot.bean.User...; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Bean...; import boot.bean.User; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import...在配置类上添加该注解: @ImportResource("classpath:xxx") 配置绑定 使用Java读取到properties文件中的内容,并且把封装到JavaBean中(将配置文件的内容与组件相绑定

    22340

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

    两个条件注解,那么只有在满足:classpath中存在HelloWorldComponent.class和配置了hello.world.name和hello.world.age属性这两个条件的情况下才会创建...因此,这里只有 LinuxCondition的matches方法返回true才会创建bean。...w=1785&h=410&f=png&s=49034] 可以看到SpringBootCondition作为SpringBoot条件注解的基类,处于整个类图的中心,实现了Condition接口,然后又有很多具体的子类...SpringBootConditon实现了Condition接口,作为SpringBoot众多条件注解OnXXXCondtion的父类,的作用主要就是打印一些条件注解评估报告的日志,比如打印哪些配置类是符合条件注解的...注解的情况 if (metadata.isAnnotated(ConditionalOnBean.class.getName())) { // 将@ConditionalOnBean注解属性封装进

    1.3K00

    SpringBoot基础篇Bean之条件注入之注解使用

    Bean的存在与否作为条件 当Bean不存在时,创建一个默认的Bean,在Spring的生态中可以说比较常见了;接下来看下这种方式可以怎么用 1....@ConditionalOnBean 要求bean存在时,才会创建这个bean;如我提供了一个bean名为RedisOperBean,用于封装redis相关的操作;但是我这个bean需要依赖restTemplate...这个bean,只有当应用引入了redis的相关依赖,并存在RestTemplate这个bean的时候,我这个bean才会生效 假设bean的定义如下 @Component @ConditionalOnBean...(); } /** * 只有当DependedBean 存在时,才会创建bean: `LoadIfBeanExist` * * @return */ @Bean @ConditionalOnBean...下面以一个简单的demo进行演示的使用姿势 1.

    1.2K20

    @ConditionalOn...注解,条件组合你知道吗?

    @ConditionalOnBean 和 ConditionalOnMissingBean 有时候我们需要某个 Bean 已经存在应用上下文时才会加载,那么我们会用到 @ConditionalOnBean...,开个玩笑,咱们继续: @ConditionalOnSingleCandidate 这个注解和 @ConditionalOnBean 类似,为了更好的说明该注解的使用 (其实是 才疏学浅 ) ,我只能翻译一下类的注释了...只有指定类存在于 BeanFactory 中,并且可以确定单个候选项才会匹配成功 BeanFactory 存在多个 bean 实例,但是有一个 primary 候选项被指定(通常在类上使用 @Primary...bean 被另外一个 auto-configuration 创建,确保使用该条件的要在其后面运行 @ConditionalOnResource 如果我们要加载的 bean 依赖指定资源是否存在于 classpath...与之相反,在非 web 环境才加载 bean ?

    48110

    @ConditionalOn...注解,条件组合你知道吗?

    @ConditionalOnBean 和 ConditionalOnMissingBean 有时候我们需要某个 Bean 已经存在应用上下文时才会加载,那么我们会用到 @ConditionalOnBean...,开个玩笑,咱们继续: @ConditionalOnSingleCandidate 这个注解和 @ConditionalOnBean 类似,为了更好的说明该注解的使用 (其实是 才疏学浅 ) ,我只能翻译一下类的注释了...只有指定类存在于 BeanFactory 中,并且可以确定单个候选项才会匹配成功 BeanFactory 存在多个 bean 实例,但是有一个 primary 候选项被指定(通常在类上使用 @Primary...bean 被另外一个 auto-configuration 创建,确保使用该条件的要在其后面运行 @ConditionalOnResource 如果我们要加载的 bean 依赖指定资源是否存在于 classpath...与之相反,在非 web 环境才加载 bean ?

    6.3K41
    领券