【发布时间】:2020-11-10 18:56:54
【问题描述】:
我正在使用@ConfigurationProperties 将属性绑定到 Spring Boot 项目中的 Java bean,如下所示:(示例取自 Spring 文档)
@ConfigurationProperties("acme")
public class AcmeProperties {
private boolean enabled;
private InetAddress remoteAddress;
private final Security security = new Security();
public boolean isEnabled() { ... }
public void setEnabled(boolean enabled) { ... }
public InetAddress getRemoteAddress() { ... }
public void setRemoteAddress(InetAddress remoteAddress) { ... }
但在Spring Boot Docs 中有一个警告
映射到 Spring Boot 中可用的 @ConfigurationProperties 类的属性(通过属性文件、YAML 文件、环境变量等进行配置)是公共 API,但类本身的访问器(getter/setter)并不意味着可以直接使用。
我有点不明白这意味着什么。这是否是说我应该创建实例字段public 而不是使用AcmeProperties bean 中的getter(即getRemoteAddress())?我不明白为什么直接访问字段与通过 getter 访问会有所不同。很多tutorials 的字段为private。
或者这个警告是指别的什么?
提前致谢!
【问题讨论】:
-
你不应该只使用设置器,但是设置器是绑定工作所必需的(因为它需要一个可写的属性)。将字段公开将无济于事(字段不是 Java Beans 规范意义上的属性)。我认为该声明令人困惑,并没有真正澄清事情。
-
@M.Deinum 所以这个警告只针对 setter 而不是 getter?虽然它特别提到了
getters... -
是的,我知道,但我怀疑它仅适用于设置器,因为绑定工作需要这些设置器。您需要使用 getter 来获取值,因此不使用 getter 不是一种选择,因为这也会违背类型安全配置类的使用。
-
@M.Deinum 是的,这让我感到困惑。除了公开违反 Bean 规范的字段之外,不确定如何在没有 getter 的情况下使用它。除非警告发生在其他事情上。
标签: java spring spring-boot