【Spring Boot 注解】@ConfigurationProperties

文章目录

@ConfigurationProperties注解

一、简介

@ConfigurationProperties 是 Spring Boot 提供的一个强大注解,用于将外部配置(如 application.properties 或 application.yml 文件中的属性)绑定到 Java 对象上。

二、依赖引入

xml 复制代码
<dependencies>
    <!-- Spring Boot 配置绑定支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional> <!-- Optional 是为了不影响运行时的依赖 -->
    </dependency>
</dependencies>

说明

  • spring-boot-configuration-processor:该依赖用于生成配置元数据,它会帮助你的 IDE 提供自动补全、文档提示等功能,方便配置类的开发。
  • optional=true:这表示这个依赖不会影响项目的运行,它只是编译时依赖,生成配置元数据。

三、基本用法

java 复制代码
@ConfigurationProperties(prefix = "database")
public class DatabaseProperties {
    private Connection connection;
    private Pool pool;
    
    // 嵌套类
    public static class Connection {
        private String url;
        private String username;
        private String password;
        // getters and setters
    }
    
    public static class Pool {
        private int maxActive;
        private int maxIdle;
        // getters and setters
    }
	// 数组
	private List<String> servers;
    // getters and setters
}

对应的 application.properties:

xml 复制代码
database:
  connection:
    url: jdbc:mysql://localhost/test
    username: root
    password: secret
  pool:
    max-active: 10
    max-idle: 5
    
my:
  servers:
    - 192.168.1.1
    - 192.168.1.2
    - 192.168.1.3

四、主要特性

  • 前缀绑定:通过 prefix 属性指定配置前缀
  • 类型安全:自动将属性值转换为目标类型
  • 嵌套属性支持:支持复杂对象的嵌套配置
  • 集合支持:支持 List、Map 等集合类型
  • 验证支持:可与 JSR-303 验证注解结合使用

五、激活方式

1.与 @Configuration 一起使用

适用于配置类场景,常和 @Bean 配合手动注册:

java 复制代码
@Configuration
public class MyConfig {

    @Bean
    @ConfigurationProperties(prefix = "app")
    public AppProperties appProperties() {
        return new AppProperties();
    }
}

2.通过 @EnableConfigurationProperties 启用

适用于第三方配置类或不想在类上加 @Component 的情况:

java 复制代码
@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class MyConfig {
}

此时 AppProperties 类只需要加 @ConfigurationProperties:

java 复制代码
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
    // getters/setters...
}

常用于你不控制源代码的类(比如第三方 jar 包中的配置类)或为了更清晰地分离配置绑定与组件扫描。

3.作为常规 Spring Bean 注册(配合 @Component)

java 复制代码
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
}

使用 @Component,Spring 会自动将其注册为 Bean,前提是类被包扫描路径覆盖到。

六,优点

1.解耦配置:不需要在代码中硬编码配置,能够从外部配置文件(如 application.yml 或 application.properties)中获取配置。

2.自动绑定:Spring Boot 会根据配置文件中的属性名自动绑定到对应的字段。

3.类型安全:相比使用 @Value 注解,@ConfigurationProperties 提供了更强的类型安全,尤其是当配置项较多时,使用起来更加方便。

七、与 @Value 对比

特性 @ConfigurationProperties @Value
松散绑定 ✅ 支持(如 kebab-casecamelCase ❌ 不支持
复杂类型 ✅ 支持(嵌套对象、集合等) ⚠️ 有限支持(基本类型、简单集合)
验证 ✅ 支持(结合 @Validated ❌ 不支持
SpEL 表达式 ❌ 不支持 ✅ 支持(如 #{systemProperties['prop']}
适合场景 多个相关属性(统一管理配置类) 单个简单属性(分散注入)
相关推荐
paopaokaka_luck1 小时前
基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
前端·javascript·vue.js·spring boot·后端·小程序·uni-app
Villiam_AY1 小时前
Redis 缓存机制详解:原理、问题与最佳实践
开发语言·redis·后端
魔尔助理顾问4 小时前
系统整理Python的循环语句和常用方法
开发语言·后端·python
程序视点4 小时前
Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
java·后端
GEM的左耳返5 小时前
Java面试全攻略:Spring生态与微服务架构实战
spring boot·redis·spring cloud·微服务·kafka·java面试
愿你天黑有灯下雨有伞5 小时前
Spring Boot SSE实战:SseEmitter实现多客户端事件广播与心跳保活
java·spring boot·spring
你的人类朋友5 小时前
❤️‍🔥微服务的拆分策略
后端·微服务·架构
AI小智6 小时前
后端变全栈,终于可以给大家推出我的LangChain学习小站了!
后端
lkf197117 小时前
商品中心—1.B端建品和C端缓存
开发语言·后端·缓存
我的ID配享太庙呀7 小时前
Django 科普介绍:从入门到了解其核心魅力
数据库·后端·python·mysql·django·sqlite