1. 简介

在本文中,我们将通过实际示例,讲解 Spring 框架中 @EnableConfigurationProperties 注解的用途,以及它是如何与 @ConfigurationProperties 注解配合使用的。

如果你已经了解 @ConfigurationProperties 的基本用法,那理解本篇内容会更加轻松。如果你还不熟悉,可以先阅读我们关于 Spring Boot 配置绑定的文章

2. @EnableConfigurationProperties 的作用

@EnableConfigurationProperties 是 Spring 中用于启用配置属性绑定功能的核心注解。

它和 @ConfigurationProperties 密不可分。只有启用了 @EnableConfigurationProperties,Spring 才会处理 @ConfigurationProperties 注解所标记的类

不过,Spring Boot 默认已经自动启用了 @EnableConfigurationProperties,也就是说,在 Spring Boot 项目中无需手动添加该注解也可以正常使用配置属性绑定功能

那什么时候才需要显式使用这个注解呢?
当你希望将一个 @ConfigurationProperties 类注册为 Spring 容器中的 Bean,但又不想使用 @Component@Bean 显式声明它时,就可以通过 @EnableConfigurationProperties 来直接注册。

✅ 一句话总结:
@EnableConfigurationProperties 提供了一种简洁方式来注册 @ConfigurationProperties 类型的 Bean,尤其适用于希望保持配置类为 POJO 的场景。

3. 使用示例

下面我们通过一个简单的例子来演示如何使用 @EnableConfigurationProperties

3.1 定义配置类

首先,我们定义一个配置类:

@ConfigurationProperties(prefix = "additional")
public class AdditionalProperties {

    private String unit;
    private int max;

    // standard getters and setters
}

⚠️ 注意:该类只使用了 @ConfigurationProperties 注解,并没有使用 @Component 或其他注解标记为 Spring Bean。

3.2 启用并注册配置类

接下来,我们创建一个配置类,并使用 @EnableConfigurationProperties 注册上面定义的 AdditionalProperties

@Configuration
@EnableConfigurationProperties(AdditionalProperties.class)
public class AdditionalConfiguration {
    
    @Autowired
    private AdditionalProperties additionalProperties;
    
    // 在这里可以使用绑定的配置属性
}

这样,Spring 就会自动将 application.propertiesapplication.yml 中以 additional 为前缀的属性绑定到 AdditionalProperties 实例中,并将其注册为一个 Bean。

✅ 小结:
通过 @EnableConfigurationProperties,我们可以将一个纯 POJO 的配置类快速注册为 Spring Bean,而无需添加 @Component 或其他注解。

4. 总结

本文我们讲解了 @EnableConfigurationProperties 的作用和使用场景,并通过一个简单的示例演示了如何在不使用 @Component 的情况下,将 @ConfigurationProperties 类注册为 Spring 容器中的 Bean。

虽然在 Spring Boot 项目中通常不需要显式添加该注解,但在某些特定的配置管理场景下,使用 @EnableConfigurationProperties 可以让代码更清晰、结构更合理。

如需查看完整示例代码,请访问 GitHub 仓库


原始标题:Guide to @EnableConfigurationProperties | Baeldung