0Pricing
Spring Boot 4 Microservices & REST APIs · 课时

使用 @ConfigurationProperties 实现类型安全配置

将属性绑定到带类型的配置类

使用 @ConfigurationProperties 实现类型安全配置 是 CoddyKit 上的免费 Spring Boot 4 Microservices & REST APIs 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Spring Boot 4 Microservices & REST APIs 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Spring Boot 4 Microservices & REST APIs 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

Beyond @Value

Scattering dozens of @Value annotations across a feature is brittle and hard to validate. @ConfigurationProperties binds a whole group of related keys to a single strongly typed object.

You get IDE auto-completion, type safety, validation, and a clear contract for what the feature reads.

Binding a Prefix to a Class

Declare a class with a prefix; Spring maps each key under that prefix to a matching field. Relaxed binding lets max-retries in YAML map to maxRetries in Java.

@ConfigurationProperties(prefix = "app.mail")
public class MailProperties {
    private String host;
    private int port;
    private int maxRetries;
    // getters and setters
}

Registering the Properties Bean

A @ConfigurationProperties class must become a bean. The cleanest way is @EnableConfigurationProperties on a configuration class, or @ConfigurationPropertiesScan on the main app.

@SpringBootApplication
@ConfigurationPropertiesScan
public class Application { }

// or explicitly:
@Configuration
@EnableConfigurationProperties(MailProperties.class)
class MailConfig { }

The Backing YAML

With the prefix app.mail, these YAML keys bind to the fields. Relaxed binding accepts kebab-case keys for camelCase fields.

app:
  mail:
    host: smtp.example.com
    port: 587
    max-retries: 3

Injecting the Properties

Inject the typed object anywhere like any other bean. The feature code reads structured config instead of loose strings.

@Service
public class MailService {
    private final MailProperties props;
    public MailService(MailProperties props) {
        this.props = props;
    }
    void send() {
        connect(props.getHost(), props.getPort());
    }
}

Immutable Binding with Records

Spring Boot supports constructor binding, perfect for immutable config. A Java record works directly with @ConfigurationProperties, no setters needed.

@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(
        String host,
        int port,
        int maxRetries) {
}

Default Values

With records you can give defaults in a compact constructor; with classic classes you initialize the field. Defaults apply when the key is absent from the Environment.

@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(String host, Integer port, Integer maxRetries) {
    public MailProperties {
        if (port == null) port = 587;
        if (maxRetries == null) maxRetries = 3;
    }
}

Nested Objects

Configuration trees map to nested types. A field of a custom type binds keys one level deeper, keeping complex config organized.

@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private final Security security = new Security();
    public Security getSecurity() { return security; }
    public static class Security {
        private boolean enabled;
        private String issuer;
        // getters/setters
    }
}

Lists and Maps

Collection-typed fields bind to YAML sequences and maps automatically, which is far cleaner than parsing comma-separated strings by hand.

@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private List<String> allowedOrigins;
    private Map<String, Integer> rateLimits;
    // getters/setters
}
// app.allowed-origins: [a, b]
// app.rate-limits: { read: 100, write: 20 }

Validating Bound Values

Add @Validated to the properties class and JSR-380 constraints to fields. Spring validates at startup and fails fast if config is invalid, instead of erroring deep in production.

@Validated
@ConfigurationProperties(prefix = "app.mail")
public class MailProperties {
    @NotBlank private String host;
    @Min(1) @Max(65535) private int port;
    // getters/setters
}

Metadata and the Processor

Add spring-boot-configuration-processor as an annotation processor to generate metadata. Your IDE then offers auto-complete and docs for your custom keys in application.yml.

<!-- pom.xml -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

Quick Check

Test your understanding of relaxed binding.

Recap

@ConfigurationProperties gives type-safe, grouped configuration.

  • Bind a prefix to a class or record
  • Register via @ConfigurationPropertiesScan or @EnableConfigurationProperties
  • Records enable immutable constructor binding
  • Nested types, lists, and maps bind naturally
  • @Validated makes invalid config fail fast at startup

常见问题解答

「使用 @ConfigurationProperties 实现类型安全配置」课时是免费的吗?

是的 — 「使用 @ConfigurationProperties 实现类型安全配置」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Spring Boot 4 Microservices & REST APIs 课程的其余内容,请升级到 CoddyKit PRO。 Spring Boot 4 Microservices & REST APIs 课程共包含 4 节课。

「使用 @ConfigurationProperties 实现类型安全配置」这节课中我会学到什么?

将属性绑定到带类型的配置类 你通过在浏览器中直接运行的动手代码来练习 Spring Boot 4 Microservices & REST APIs,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Spring Boot 4 Microservices & REST APIs 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Spring Boot 4 Microservices & REST APIs 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 @ConfigurationProperties 实现类型安全配置」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Spring Boot 4 Microservices & REST APIs 课中编写并运行代码吗?

能。每节 Spring Boot 4 Microservices & REST APIs 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. application.properties 和 YAML
  2. 环境配置文件
  3. 使用 @ConfigurationProperties 实现类型安全配置
  4. 外部化配置和配置覆盖
← 返回 Spring Boot 4 Microservices & REST APIs