Spring Boot 属性值的注入(@Value, @ConfigurationProperties)

Spring Boot 属性值的注入(@Value, @ConfigurationProperties)

编码文章call10242025-01-21 10:13:4814A+A-

在 Spring Boot 应用程序中,属性值的注入是一个常见的操作,用于将外部配置(如 application.properties 或 application.yml 文件)中的值注入到应用程序的组件中。以下是两种常用的属性注入方式:@Value 和 @ConfigurationProperties。

使用@Value注入属性

@Value 注解是 Spring 框架提供的一个用于注入外部属性的方法。它可以用于字段、方法或构造器参数上,以注入配置文件中的值。

以下是如何使用 @Value 注入属性的一个例子:

@Component
public class MyComponent {

    @Value("${my.property}")
    private String myProperty;

    // 或者使用 SpEL 表达式
    @Value("#{systemProperties['user.dir']}")
    private String userDir;

    // ...
}

在上面的例子中,${my.property} 是一个占位符,它会被配置文件中 my.property 对应的值所替换。如果配置文件中没有对应的值,那么注入的字段将保持默认值(null 对于对象类型,0 对于数值类型等)。

使用@ConfigurationProperties注入属性

@ConfigurationProperties 注解用于将整个配置文件或配置文件的一部分绑定到一个 Java 对象上。这种方式特别适合于有大量属性需要注入的情况。

以下是如何使用 @ConfigurationProperties 注入属性的一个例子:

首先,定义一个配置类:

@Configuration
@ConfigurationProperties(prefix = "my")
public class MyProperties {

    private String property1;
    private int property2;
    // ... 其他属性

    // getters 和 setters
    public String getProperty1() {
        return property1;
    }

    public void setProperty1(String property1) {
        this.property1 = property1;
    }

    public int getProperty2() {
        return property2;
    }

    public void setProperty2(int property2) {
        this.property2 = property2;
    }

    // ...
}

然后在 application.properties 或 application.yml 文件中配置属性:

# application.properties
my.property1=value1
my.property2=42
# ... 其他属性

或者使用 YAML 格式:

# application.yml
my:
  property1: value1
  property2: 42
  # ... 其他属性

Spring Boot 会自动将配置文件中以 my 为前缀的属性绑定到 MyProperties 类的相应字段上。

为了使 @ConfigurationProperties 注解生效,需要在 Spring Boot 应用程序的主类或任何配置类上添加 @EnableConfigurationProperties 注解,或者直接在配置类上使用 @ConfigurationProperties 注解并使其成为 Spring Bean(如上例所示)。

比较@Value和@ConfigurationProperties

  • @Value 通常用于注入单个属性值,而 @ConfigurationProperties 适合于注入一组相关属性。
  • @ConfigurationProperties 支持松散绑定(例如,属性名中的下划线、中划线和驼峰命名可以互相转换),而 @Value 不支持。
  • @ConfigurationProperties 提供了类型安全的配置绑定,并且可以与 Spring Boot 的配置校验(如 JSR-303/JSR-380)一起使用。
  • 使用 @ConfigurationProperties 时,如果配置文件中的属性缺失,则不会注入默认值,而是会抛出异常,这有助于及早发现配置错误。而 @Value 如果没有找到对应的属性,则字段保持默认值。

#spring boot#

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4