首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以用Spring创建@ConditionalOnMissingBean (没有spring-boot)的自定义条件?

是否可以用Spring创建@ConditionalOnMissingBean (没有spring-boot)的自定义条件?
EN

Stack Overflow用户
提问于 2021-12-13 12:23:35
回答 1查看 402关注 0票数 1

我试图实现一个Spring条件,只有在某个类没有其他bean的情况下,它才会加载我的bean。所需的行为类似于"@ConditionalOnMissingBean“,但不使用spring。

我正在使用SpringVersion5.3.13。

这有可能吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-14 07:27:38

我通过研究spring引导源代码找到了一个解决方案。ConditionalOnBean只对在配置(bean方法)中定义的bean工作。对于@ConditionalOnBean,spring java doc也推荐这样做。

条件只能与应用程序上下文处理过的bean定义相匹配,因此强烈建议只在自动配置类上使用该条件。如果候选bean可能是由另一个自动配置创建的,请确保使用此条件的bean随后运行。

这里是我想出的解决方案的基础,这可能会得到改进,但基本操作很好。

条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Slf4j
class MissingBeanCondition implements ConfigurationCondition {
    @Override
    public ConfigurationPhase getConfigurationPhase() {
        return ConfigurationPhase.REGISTER_BEAN;
    }

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        var targetBeanType = metadata.getAnnotations()
                .get(ConditionalOnMissingBean.class)
                .getValue("value", Class.class)
                // TODO throw a more informative error
                .orElseThrow(() -> new RuntimeException("Failed to evaluate MissingBeanCondition"));
        
        try {
            context.getBeanFactory().getBean(targetBeanType);
        } catch (NoSuchBeanDefinitionException e) {
            return true;
        }
       
        return false;
    }
}

注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Conditional(MissingBeanCondition.class)
public @interface ConditionalOnMissingBean {
    Class<?> value();
}

用法示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
@Singleton
@ConditionalOnMissingBean(Provider.class)
public Provider myClass() {
    return new DefaultProvider();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70340488

复制
相关文章
Qml好用的default附加属性
  看似很没用的属性却说有用,还说好用。第一个例子看起来和常规做法差不多。那么我们看看第二个例子使用起来是如何好用的。   Group.qml组件:
Qt君
2019/07/15
1.6K0
Qml好用的default附加属性
Qml引用Loader组件属性
  本例子使用Loader加载myComponent组件,然后通过Loader的item属性设置myComponent的value属性。
Qt君
2023/03/17
8560
Qml引用Loader组件属性
Qml属性绑定小误区
  下面代码中,Text对象绑定了car.wheels属性。当onCompleted执行完成时,car.wheels = 6也同样执行完成了。预想结果是Text对象会动态更新,但实际上是不会更新的。
Qt君
2023/03/17
5650
Qml属性绑定小误区
物理内存是如何组织管理的
内存管理,相比大家都听过。但是内存管理到底是做什么呢?这就得从计算机刚出来的时候说起。计算机刚出来的时候内存资源很紧张,只有几十K,后来慢慢的到几百K,到周后来的512M,再到现在的几个G。真是因为内存资源的不足,在计算机的整个过程中衍生出各种各样的内存管理方法。
DragonKingZhu
2020/04/16
1.6K0
Qml属性implicitWidth/Height与width/height区别
  implicitWidth/Height一般用在可重用控件,它也不是必要的,QtQuick可以没有者两个属性,只因为了方便而存在。qt例子描述到什么情况下用到implicitWidth/height属性,就是Image。它提供了项目的自然大小的提示,但没有强制执行此大小。图像的自然尺寸将图像文件中的一个像素映射到屏幕上的一个像素。但它允许我们拉伸它,因此大小不会被强制执行并且可以被覆盖。另外有些控件直接设置width/height会造成性能损失(Text,TextEdit).
Qt君
2019/07/15
1.7K0
QML教程-属性绑定与赋值
写QML界面会经常使用到很多的属性,其中属性的绑定与解绑尤其重要,决定着该界面属性是否能动态更新的功能。本文介绍属性的绑定与非绑定特性。 1.属性绑定 使用 :操作符,作用是左值绑定右值。 例: Item { property color myColor: "white" ... Rectangle { color: myColor ... } } color绑定父控件 myColor属性。 2.属性非绑定(解除绑定) 使用 =操作符,作用是左值解除右值绑定 例: Item {
Qt君
2019/07/15
2.1K0
SpringCloud是如何动态更新配置的
spring cloud在config配置管理的基础上,提供了consul config的配置管理和动态监听,那么这里面到底是怎样实现的,本文将为你揭秘。
tunsuy
2022/10/27
2.6K0
Vue是如何触发组件更新的?
Vue是数据驱动的一个视图框架,所谓数据驱动就是DOM是通过数据来映射的,只有在数据改变的情况下视图才会发生改变。
越陌度阡
2022/05/06
1K0
Vue是如何触发组件更新的?
Confluence 6 内容在空间中是如何组织的
你可以将空间考虑为一个容器,在这个容器中保持了有关你项目中所有重要的东西,包括小组,项目或者项目相关的工作。这些东西有很高的自主性,这表示的是每个空间都有自己的的页面,文件,评论以及 RSS 新闻源。
HoneyMoose
2019/01/30
5500
Confluence 6 内容在空间中是如何组织的
计算属性是如何被Vue实现的
无论是面试过程还是日常业务开发,相信大多数前端开发者对于 Vue 的应用已经熟能生巧了。
19组清风
2022/09/27
8290
计算属性是如何被Vue实现的
ERP那些具有“组织”属性字段的启发
声明:本文仅代表原作者观点,仅用于SAP软件的应用与学习,不代表SAP公司。注:文中所示截图来源SAP软件,相应著作权归SAP所有。文中所指ERP即SAP软件。
齐天大圣
2021/04/23
8710
ERP那些具有“组织”属性字段的启发
[答疑]发现研究的组织是自己所在组织,有点慌
我们做业务建模研究的组织可以是自己所在的组织吗?例如,如果我想做一个组件来来提高研发效能,那我研究的组织是我们部门的研发线可以吗? 因为最近做一个设备管理的建模,发现研究的组织是自己所在组织,有点慌。
用户6288414
2019/09/23
4310
[答疑]发现研究的组织是自己所在组织,有点慌
Java | Apollo 是如何实现配置更新的
在 Apollo 控制台进行配置修改并发布后,对应的 client 端拉取到更新后,会调用到 com.ctrip.framework.apollo.spring.property.AutoUpdateConfigChangeListener#onChange 方法
双鬼带单
2021/03/18
2.3K0
Outlaw黑客组织武器更新分析
网络犯罪集团保持沉默不一定意味着没有活动,过去几个月一直保持沉默的黑客组织Outlaw更新了其武器库。
FB客服
2020/05/29
8940
Outlaw黑客组织武器更新分析
Dva 底层是如何组织起 Redux 数据流的?
dva 首先是一个基于redux[1]和redux-saga[2]的数据流方案,然后为了简化开发体验,dva 还额外内置了react-router[3]和fetch[4],所以也可以理解为一个轻量级的应用框架。
用户3806669
2021/07/06
1.4K0
Dva 底层是如何组织起 Redux 数据流的?
我是如何组织 Go 代码的(目录结构 依赖注入 wire)
对于大多数 Gopher 来说,编写 Go 程序会直接在目录建立 main.go,xxx.go,yyy.go……
仁扬
2023/07/18
5760
欧洲核子研究组织(CERN)是如何使用 Linux 和开源的
CERN 无需过多介绍了吧。CERN 创建了 万维网(World Wide Web)(WWW)和 大型强子对撞机(Large Hadron Collider)(LHC),这是世界上最大的 粒子加速器(particle accelerator),就是通过它发现了 希格斯玻色子(Higgs boson)。负责该组织 IT 操作系统和基础架构的 Tim Bell 表示,他的团队的目标是“为全球 13000 名物理学家提供计算设施,以分析这些碰撞,了解宇宙的构成以及是如何运转的。”
用户8639654
2021/10/21
7160
Django批量更新多个属性
有时候我们需要同时(一次性)更新某个用户的多条属性。 1. 用户model如下: class User(models.Model): UID = models.CharField('员工uid', max_length=200,) name = models.CharField('员工名字', max_length=200,) mobile = models.CharField('手机号', max_length=200,) mail = models.EmailField(u'邮箱', max_lengt
BigYoung小站
2020/05/04
2.1K0
一条更新语句是如何执行的?
之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?
王小明_HIT
2020/05/25
5320
【C++】Class中的属性和方法是如何存储的
在C++中对于一个Class,它内部的数据和方法到底是如何存储的呢?是将数据和方法都存储到Class的单个对象中呢,还是会将数据和方法分开来存储?如下图所示:
灰子学技术
2020/04/02
1.4K0

相似问题

如何从函数内部更新QML属性

19

无法更新组织属性

25

QML更新ListView中Item的属性

10

QT QML文本属性更新

271

如何通过动态更新属性来更新ListElement (QML)值字段

39
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文