gpt4 book ai didi

java - 不可变的@ConfigurationProperties

转载 作者:IT老高 更新时间:2023-10-28 13:05:23 32 4
gpt4 key购买 nike

Spring Boot 的 @ConfigurationProperties 是否可以拥有不可变(最终)字段?注解?下面的例子

@ConfigurationProperties(prefix = "example")
public final class MyProps {

private final String neededProperty;

public MyProps(String neededProperty) {
this.neededProperty = neededProperty;
}

public String getNeededProperty() { .. }
}

到目前为止我尝试过的方法:

  1. 创建 @BeanMyProps具有两个构造函数的类
    • 提供两个构造函数:empty 和 with neededProperty论据
    • bean 是使用 new MyProps() 创建的
    • 字段中的结果为 null
  2. 使用 @ComponentScan@Component提供MyProps bean 。
    • 结果为 BeanInstantiationException -> NoSuchMethodException: MyProps.<init>()

我让它工作的唯一方法是为每个非最终字段提供 getter/setter。

最佳答案

从 Spring Boot 2.2 开始,终于可以定义一个用 @ConfigurationProperties 修饰的不可变类了。
The documentation显示一个例子。
您只需要声明一个带有要绑定(bind)的字段的构造函数(而不是 setter 方式)并添加 @ConstructorBinding类级别的注解,指示应该使用构造函数绑定(bind)。
所以你没有任何 setter 的实际代码现在很好:

@ConstructorBinding
@ConfigurationProperties(prefix = "example")
public final class MyProps {

private final String neededProperty;

public MyProps(String neededProperty) {
this.neededProperty = neededProperty;
}

public String getNeededProperty() { .. }
}

关于java - 不可变的@ConfigurationProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137932/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com