考虑简单的例子:
@ConfigurationProperties("some.prefix")
@ConstructorBinding
class Props {
final List<String> strings;
public Props(List<String> strings) {
this.strings = strings;
}
}
尽管我试图在这里创建不可变的类,但 Spring 不会毫无帮助地注入可变的类ArrayList
。
现在,在一个非常简单的例子中,你当然可以自己包装它,Collections.unmodifiableList()
但是这样做很快就会变得乏味,特别是当你嵌套集合类型时。
想象一下深度冻结的代码,例如Map<String, List<String>>
:(
当您只想使用lombok.Value
或者也许 Kotlin(没有检查)来完全避免编写样板时,情况会更糟。
不确定为什么这些属性类应该是可变的,但如果需要,可以添加属性来@ConfigurationProperties
控制它。使用时应该自动启用它,@ConstructorBinding
因为这是一个明确的信号,有人正在尝试创建不可变的属性。