当前位置: 首页 > article >正文

SpringBoot 根据配置前缀绑定配置:@ConfigurationProperties

文章目录

      • 内部 Bean 配置绑定
      • 第三方 Bean 配置绑定

@ConfigurationProperties 是 Spring 在 org.springframework.boot.context.properties 包中提供的一个注解。它的作用是根据注解中配置的前缀对 SpringBoot 配置文件(即 application.xxx)中前缀相同的配置进行属性绑定。

对于 @ConfigurationProperties 注解,通常有如下应用场景:

  • 场景一:如果需要让 Spring 当中的 Bean 与 application.xxx 中相关的配置进行绑定,在单个配置绑定的情况下,使用 @Value 注解十分方便,但是如果有多个配置都需要绑定的情况下,虽然仍然可以使用 @Value 对其进行配置绑定,但一个个绑定太过麻烦。
  • 场景二:如果需要让一个外部类(如第三方 Jar 包)中的配置,在无法修改外部类中的代码的情况下,需要将外部类与 application.xxx 中的相关配置进行绑定,需要在配置类中声明外部 Bean 并进行配置绑定。

@ConfigurationProperties 注解就可以解决上述两个问题。

内部 Bean 配置绑定

使用 @ConfigurationProperties 可以对 IOC 容器内部的 Bean 进行配置绑定。例如:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "school")
public class SchoolProperties {

    private String name;

    private String address;

    private String type;

}

对于以上案例的 application.yml 配置:

school:
  name: 人才大学
  address: 长沙市
  type: A_School

上述案例中,声明了一个名为 SchoolProperties 的 Spring Bean,通过 @ConfigurationProperties(prefix = "school") 绑定 application.yml 中以 school 为前缀的三个配置 nameaddresstype

第三方 Bean 配置绑定

使用 @ConfigurationProperties 也可以对 IOC 容器外部(即第三方包中提供的 Bean)进行配置绑定。例如:

@Configuration
public class SchoolConfig {
    
    @Bean
    @ConfigurationProperties(prefix = "school")
    public SchoolProperties schoolProperties(){
        return new SchoolProperties();
    }
    
}

上述案例中,假设 SchoolProperties 是一个外部第三方 Jar 包中的类。因为无法修改 SchoolProperties 的源码,所以通过在一个 SchoolConfig 的配置类中手动使用 @Bean 向 Spring IOC 容器中注入了一个 SchoolProperties 类型的 Bean,并且通过 @ConfigurationProperties(prefix = "school") 将配置文件中以 school 为前缀的配置进行属性绑定。


http://www.kler.cn/a/585053.html

相关文章:

  • Python学习第十三天
  • 第三百七十五节 JavaFX教程 - JavaFX表视图
  • 【氮化镓】开态GaN HEMTs中氧诱导Vth漂移的缺陷演化
  • 【Go学习】04-4-Gorm框架-增删改查事务钩子
  • Redis 源码分析-内部数据结构 ziplist
  • React hook钩子性能优化Hooks的面试常考题目
  • SQL29 计算用户的平均次日留存率
  • 前端面试:React hooks 调用是可以写在 if 语句里面吗?
  • 2025-03-13 学习记录--C/C++-PTA 练习2-9 整数四则运算
  • 十五、Vue 与 Webpack 5:优化构建性能的实用技巧
  • 【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )
  • Maple网络浮动版安装|添加新版本授权到已有授权服务器
  • VMware虚拟机网络连接模式介绍以及nat模式访问公网实践
  • css实现标题跑马灯效果
  • 区块链实战:手把手教你搭建私有链网络
  • 【HarmonyOS Next】鸿蒙应用常规面试题和答辩思路参考
  • kotlin中的行为组件
  • Win11+WSL2安装cuda11.8,Anaconda配置Pytorch2.4-GPU版本
  • 2025移动端软件供应链安全开源治理方案最佳实践
  • ‌HTTP 401错误