基于属性配置动态创建 Spring Boot Bean

基于属性配置动态创建 spring boot bean

本文介绍了如何在 Spring Boot 应用中基于配置属性的值动态创建 Bean。通过使用 @ConditionalOnProperty 注解,可以根据指定的属性是否存在以及其值来决定是否创建某个 Bean,从而实现灵活的配置和 Bean 的动态加载。本文将提供详细的代码示例和使用说明,帮助开发者轻松掌握此技巧。

在 Spring Boot 应用开发中,经常会遇到需要根据配置文件的不同配置来选择性地创建 Bean 的场景。例如,根据某个开关属性的值来决定使用哪种类型的连接池,或者是否启用某个特定的功能模块。Spring Boot 提供了 @ConditionalOnProperty 注解,可以轻松实现这种动态 Bean 创建的需求。

@ConditionalOnProperty 注解

@ConditionalOnProperty 是 Spring Boot 提供的一个条件注解,用于根据指定的配置属性来决定是否创建 Bean。它允许你基于属性的存在与否,以及属性的值来控制 Bean 的注册。

@ConditionalOnProperty 注解的主要属性包括:

prefix: 配置属性的前缀。name: 配置属性的名称。value: 配置属性期望的值。只有当属性的值与此值相等时,Bean 才会被创建。可以是一个字符串数组,表示多个允许的值。havingValue: 与 value 类似,但功能更强大,允许使用 SpEL 表达式。matchIfMissing: 如果指定的属性不存在,是否匹配。默认为 false,表示属性不存在时不匹配,Bean 不会被创建。设置为 true 时,属性不存在时匹配,Bean 会被创建。

使用示例

假设我们有两个 Bean,UserCredentialsConnectionFactoryAdapter 和 CachingConnectionFactory,我们希望根据配置属性 enable.userconnection 的值来决定创建哪个 Bean。如果 enable.userconnection 的值为 true,则创建 UserCredentialsConnectionFactoryAdapter Bean;如果为 false,则创建 CachingConnectionFactory Bean。

首先,定义两个 Bean:

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jms.connection.CachingConnectionFactory;import org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter;@Configurationpublic class ConnectionFactoryConfig {    @Bean    @ConditionalOnProperty(prefix = "enable", name = "userconnection", havingValue = "false", matchIfMissing = true)    public CachingConnectionFactory connectionFactory() {        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();        //connectionFactory.setTargetConnectionFactory(axonConnectionFactory);  // 假设 axonConnectionFactory 已定义        connectionFactory.setReconnectOnException(true);        //connectionFactory.setSessionCacheSize(jmsSessionCacheSize); // 假设 jmsSessionCacheSize 已定义        return connectionFactory;    }    @Bean    @ConditionalOnProperty(prefix = "enable", name = "userconnection", havingValue = "true")    public UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter() throws Exception {        UserCredentialsConnectionFactoryAdapter connectionFactoryAdapter =                new UserCredentialsConnectionFactoryAdapter();        //connectionFactoryAdapter.setUsername(getUsername()); // 假设 getUsername() 已定义        //connectionFactoryAdapter.setPassword(getPassword());   // 假设 getPassword() 已定义        //connectionFactoryAdapter.setTargetConnectionFactory(messagingJMSService().getConnectionFactory(getName())); // 假设 messagingJMSService(), getName() 已定义        return connectionFactoryAdapter;    }}

在这个例子中,CachingConnectionFactory Bean 使用 @ConditionalOnProperty 注解,prefix 为 “enable”,name 为 “userconnection”,havingValue 为 “false”。matchIfMissing 设置为 true,意味着如果 enable.userconnection 属性不存在,则默认创建 CachingConnectionFactory Bean。

UserCredentialsConnectionFactoryAdapter Bean 也使用 @ConditionalOnProperty 注解,prefix 和 name 相同,havingValue 为 “true”。

接下来,可以在 application.properties 或 application.yml 文件中设置 enable.userconnection 属性的值。

如果 application.properties 文件包含以下内容:

enable.userconnection=true

则只会创建 UserCredentialsConnectionFactoryAdapter Bean。

如果 application.properties 文件包含以下内容:

enable.userconnection=false

则只会创建 CachingConnectionFactory Bean。

如果 application.properties 文件中没有定义 enable.userconnection 属性,由于 CachingConnectionFactory Bean 的 matchIfMissing 属性设置为 true,所以会默认创建 CachingConnectionFactory Bean。

注意事项

确保配置属性的名称和前缀正确无误,否则可能导致 Bean 无法按照预期创建。havingValue 属性的值是字符串类型,即使配置属性的值是布尔类型或数值类型,也需要使用字符串表示。matchIfMissing 属性需要根据实际需求进行设置。如果希望在属性不存在时默认创建 Bean,则设置为 true;否则设置为 false。

总结

@ConditionalOnProperty 注解是 Spring Boot 提供的一个强大的工具,可以方便地根据配置属性的值动态创建 Bean,从而实现灵活的配置和 Bean 的动态加载。通过合理使用 @ConditionalOnProperty 注解,可以使 Spring Boot 应用更加可配置和可扩展。

以上就是基于属性配置动态创建 Spring Boot Bean的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/28385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
香香漫画官方版入口2025 香香漫画正版免费阅读地址
上一篇 2025年11月3日 06:19:48
edge浏览器怎么关闭购物功能和优惠券提示_edge浏览器关闭购物优惠提示方法
下一篇 2025年11月3日 06:21:51

相关推荐

  • Windows 8.1 ISO下载指南

    Windows 8.1 ISO下载指南Windows 8.1 ISO下载指南Windows 8.1 ISO下载指南Windows 8.1 ISO下载指南

    windows 8.1正式版消息已确认,虽然官方还未全面上线,但专业版、企业版以及rtm版本已被泄露并可获取。本文汇总了windows 8.1正式版iso镜像的下载与使用方法,涵盖多种版本选择及安装指导,便于用户提前部署和体验系统新特性,现分享给有兴趣的用户参考。 1、 最新的Windows 8.1…

    2026年9月7日 用户投稿
    200
  • 0.0.1路由器后台设置 10.0.0.1WiFi密码修改(中继模式)

    路由器管理地址通常不是0.0.1,而是192.168.1.1、192.168.0.1或10.0.0.1等标准地址,可通过查看路由器标签或使用ipconfig命令获取;2. 进入浏览器输入正确管理地址后登录,默认用户名和密码多为admin或查看设备标签;3. 中继模式下修改wifi密码需进入无线或中继…

    2026年9月7日
    200
  • 为什么iPhone14Mini升级后屏幕失灵如何强制重启?按音量加减后按电源键重启

    首先尝试强制重启iPhone 14 Mini,若无效则充电15分钟后再试,最后可通过恢复模式用电脑重装系统解决升级后屏幕失灵问题。 如果您的 iPhone 14 Mini 在系统升级后出现屏幕失灵、无响应或黑屏的情况,可能是由于软件冲突或系统错误导致触控功能暂时失效。以下是解决此问题的步骤: 本文运…

    2026年9月7日
    000
  • 毁灭战士黑暗时代全流程解说视频攻略是什么-毁灭战士黑暗时代全流程解说视频攻略介绍

    《暗影战士:末日纪元》是一款充满刺激与冒险体验的游戏。在这个被邪恶力量侵袭的世界里,玩家将扮演一名无畏的勇士,开启一段扣人心弦的战斗征程。 《暗影战士:末日纪元》完整流程解说视频攻略 游戏开始时,玩家将处于一片被邪恶势力占据的荒凉之地。解说视频清晰地演示了从起点到后续探险的每一步操作。玩家需要熟练掌…

    2026年9月7日
    000
  • BIOS设置入门指南

    bios作为计算机的基本输入输出系统,其合理配置与优化对系统运行具有重要意义,掌握正确的bios设置方法十分必要。 1、 开机后连续点击Delete键,进入BIOS主界面。在主菜单中定位到Boot Configuration Features选项,按下回车键进入该功能页面,可对启动相关参数进行调整。…

    2026年9月7日
    000
  • win10电脑连不上网怎么解决

    win10电脑连不上网怎么解决win10电脑连不上网怎么解决win10电脑连不上网怎么解决win10电脑连不上网怎么解决

    在我们的日常生活中,电脑联网已经成为一项基本需求,无论是听音乐、观看视频还是发送消息等操作都离不开网络的支持。然而,有时会遇到win10系统无法连接网络的问题,这可能由多种因素引起。下面,我们就为大家介绍几种解决这一问题的方法。 方法一:重置网络配置 首先,点击任务栏上的小娜图标,在搜索框内输入【命…

    2026年9月7日 用户投稿
    100
  • [UWP 自定义控件]了解模板化控件(5.1):TemplatePart vs. VisualState

    在前两篇文章中,我们分别使用了templatepart和visualstate的方法实现了相同的功能,其中visualstate显然更具灵活性。在这种情况下,我通常更倾向于使用visualstate。然而,在实际应用中,这两种实现方式并不是互斥的,许多模板化控件会同时使用这两种方法。 使用Visua…

    2026年9月7日
    000
  • windows10怎么更改用户账户(C盘Users)文件夹名_windows10用户文件夹重命名教程

    必须通过管理员账户和注册表修改来安全重命名C盘Users下的用户文件夹。首先启用Administrator账户并登录;接着在管理员环境下重命名目标用户文件夹;然后进入注册表编辑器,找到对应ProfileImagePath项,将其路径更新为新名称;推荐创建从原路径指向新路径的软链接以确保兼容性;最后注…

    2026年9月7日
    000
  • 暗区突围无限山谷免保全图鉴:高价值保险箱精准坐标手册

    暗区突围无限山谷免保全图鉴:高价值保险箱精准坐标手册暗区突围无限山谷免保全图鉴:高价值保险箱精准坐标手册暗区突围无限山谷免保全图鉴:高价值保险箱精准坐标手册暗区突围无限山谷免保全图鉴:高价值保险箱精准坐标手册

    在《暗区突围》的无限山谷战场中,掌握免保刷新规律等于掌控财富密码!这份价值千万柯恩币的战术手册,将为你揭开13个高价值保险箱的隐藏坐标与核心攻防策略! alt=”暗区突围无限山谷免保全图鉴:高价值保险箱精准坐标手册”> 核心物资分布逻辑 无限山谷保险箱遵循**「三高一险…

    2026年9月7日 用户投稿
    000
  • Win10自带的杀毒软件在哪里?Win10自带杀毒软件的位置

    Win10自带的杀毒软件在哪里?Win10自带杀毒软件的位置Win10自带的杀毒软件在哪里?Win10自带杀毒软件的位置Win10自带的杀毒软件在哪里?Win10自带杀毒软件的位置Win10自带的杀毒软件在哪里?Win10自带杀毒软件的位置

    在windows 10操作系统里,系统自带了一款防护工具,可以帮助我们保障网络环境下的设备安全。那么,这个内置的安全软件到底位于哪里呢?接下来就跟随小编的脚步一起来探索一下吧! Windows 10内置防护软件的位置 首先,请查看电脑屏幕右下角的任务栏区域,那里可能会隐藏着我们的防护软件图标。 点击…

    2026年9月7日 用户投稿
    900
  • word文档怎么编辑_word文档如何编辑

    word文档编辑主要包括内容编辑和格式编辑,内容编辑涉及文字、图片、表格等增删改查,格式编辑则包括字体、段落、页面布局等样式调整。具体步骤为:1.文字格式可通过工具栏调整字体、颜色、加粗等基础设置;2.段落格式可设置对齐方式、缩进、间距及行距提升排版美观度;3.页面布局包含页边距、纸张大小与方向、页…

    2026年9月7日
    000
  • Win10缺少DLL文件怎么解决 5种常见解决方案

    Win10缺少DLL文件怎么解决 5种常见解决方案Win10缺少DLL文件怎么解决 5种常见解决方案Win10缺少DLL文件怎么解决 5种常见解决方案Win10缺少DLL文件怎么解决 5种常见解决方案

    当你在使用windows 10系统安装程序或运行某些软件时,可能会碰到“缺少dll文件”的提示,导致程序无法正常启动或运行。为了解决这类问题,本文将为你提供几种常见的应对方法,帮助你快速修复windows 10中dll文件缺失的故障。 一、重启计算机 当出现DLL文件缺失的错误时,建议先尝试最基础的…

    2026年9月7日 用户投稿
    000
  • AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!

    AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!

    编辑 | scienceai 近年来,AI 技术在蛋白质研究领域发挥了越来越重要的作用。从 AlphaFold2 在结构预测任务上的脱颖而出,到各类蛋白质语言模型(PLMs)在功能预测方面的重大进展,生物研究者们可以利用各式各样的 AI 模型来辅助他们的研究。 然而,随着模型变得越来越复杂,如何训练…

    2026年9月7日 用户投稿
    100
  • 数组索引越界异常

    您是否曾因 ArrayIndexOutOfBoundsException 异常而苦恼?本文将为您解答此异常的成因及解决方法。 ArrayIndexOutOfBoundsException 异常发生在程序尝试访问数组中不存在的索引时。这通常发生在索引值小于 0 或大于等于数组长度时。 案例分析及解决方…

    2026年9月7日
    100
  • 百度地图怎么预定酒店_百度地图酒店预定操作方法

    百度地图提供三种酒店预订方式:一、搜索“酒店”后在地图上点击图标查看详情并预订;二、通过底部“酒店”入口浏览列表并下单;三、导航时使用“沿途搜索”查找并预订目的地附近的酒店。 如果您想在出行时快速找到并预订合适的住宿,百度地图的酒店预订功能可以提供从搜索、比价到直接下单的一站式服务。以下是完成酒店预…

    2026年9月7日
    000
  • Win7系统bitlocker如何加密和解密?

    Win7系统bitlocker如何加密和解密?Win7系统bitlocker如何加密和解密?Win7系统bitlocker如何加密和解密?Win7系统bitlocker如何加密和解密?

    如今,电脑已经成为日常生活中不可或缺的一部分,无论是用于编程设计还是休闲娱乐,它都发挥着重要作用。同时,由于电脑中可能存储着个人隐私信息,因此在某些情况下,我们需要对文件或磁盘设置密码,以防止他人随意访问我们的设备。而bitlocker正是一个专门用于为磁盘添加密码保护的实用工具。接下来,小编将为大…

    2026年9月7日 用户投稿
    000
  • 电脑硬盘容量怎么看?这几招一看就懂

    电脑硬盘容量怎么看?这几招一看就懂电脑硬盘容量怎么看?这几招一看就懂电脑硬盘容量怎么看?这几招一看就懂电脑硬盘容量怎么看?这几招一看就懂

    电脑硬盘作为存储操作系统和各类文件的核心组件,掌握其容量信息对合理分配存储资源至关重要。如果你不清楚如何查看电脑硬盘的容量,本文将为你提供几种实用且操作简便的方法,助你迅速获取所需信息。 一、通过“此电脑”查看硬盘分区容量 最直接的方式是利用Windows系统自带的“此电脑”功能,适用于所有使用Wi…

    2026年9月7日 用户投稿
    000
  • 悟空搜索和百度有什么区别_悟空搜索对比百度优势分析

    悟空搜索转型为AI工具应用小悟空,主打无广告与简洁体验,依托字节内容生态;百度则基于传统搜索推进AI原生重构,集成多模态功能与结构化结果。1、小悟空聚焦轻量创作与高效阅读,适合偏好纯净界面的用户;2、百度覆盖更广场景,支持AI写作、作图、解题等深度服务;3、百度整合外部资源并强化智能输出,小悟空侧重…

    2026年9月7日
    000
  • 荣耀手机怎么消除照片中的路人_荣耀手机照片消除路人的方法

    在我们的日常生活中,用荣耀手机拍照的时候,有时候会发现照片里出现了路人,这可能会破坏照片的整体美感。不过不用着急,接下来就教大家几种用荣耀手机消除路人的小技巧。 裁剪大法 最简便的方式就是裁剪了。打开荣耀手机里的相册,找到那张含有路人的照片,点击编辑按钮,接着选择裁剪功能。通过调节裁剪框的尺寸与位置…

    2026年9月7日
    300
  • 华为手机怎么登录两个微信_华为手机怎样实现双微信登录

    华为手机用户往往希望可以同时登录两个微信账号,这样既能兼顾工作又能保持生活的私密性。接下来就为大家详细讲解华为手机实现双微信登录的具体操作步骤。 方法一:利用微信内置分身功能 大部分华为手机都具备微信分身功能。首先,打开手机上的“设置”应用。在设置菜单里找到“应用”或者“应用管理”的选项。接着,点击…

    2026年9月7日
    000

发表回复

登录后才能评论
关注微信