如何将配置对象映射到 java 对象

How to map configuration objects to java object

我有一个 spring 启动应用程序,它使用 spring 云配置。 我如何将配置元素映射到某些 java 对象。

我的配置是这样的:

clients:
- id         : 1
  name: client 1
  groups    : [a,b]

- id         : 2
  name: client 2
  groups    : [a]

我的 java 对象是:

public class ClientInfo {
  private String clientId;
  private List<String> profiles;

  public ClientInfo(String clientId, List<String> pips) {
    this.clientId = clientId;
    this.profiles = pips;
  }
  public String getClientId() {
    return clientId;
  }

  public void setClientId(String clientId) {
    this.clientId = clientId;
  }

  public List<String> getProfiles() {
    return profiles;
  }

  public void setProfiles(List<String> profiles) {
    this.profiles = profiles;
  }
}

我想用列表映射我的配置

使用下面的代码将配置属性配置到 java 对象,

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "clients")
public class ClientInfo {

private String id;
private String name;
private List<String> groups;

public String getId(){ return id;}

public String getName(){ return name;}

public List<String> getGroups(){ return groups;}

}

检查以下示例 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

将此 class 注入另一个 class :

@Autowired
private ClientInfo clientInfo;

如果 class 使用 "new operator" 实例化,上述自动连接将不起作用。

实际上我找到了它不起作用的原因。 所需要的只是拥有另一个 class,其中包含一个 ClientInfo 列表,并在其上添加 @EnableConfigurationProperties 和 @ConfigurationProperties 注释。这是因为 "clients" 在我的配置中是一个列表。更改后我们可以使用@Autowired 注解来注入配置。