通过代码API访问Spring配置属性元数据

Luc*_*cas 2 java configuration spring json spring-boot

我最近了解到Spring可以生成文件spring-configuration-metadata.json并创建additional-spring-configuration-metadata.json文件。

是否可以通过 Spring 本机访问此信息,例如,能够打印从此 JSON 文件中提取的帮助消息?我没有看到Spring 文档中提到的任何内容。据我所知,配置类是 POJO,在实际注入的对象中没有任何与它们关联的 Spring 元数据。

假设我有以下课程:

package test;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "myConfig")
public class MyConfig
{
    /**
    * myField description.
    */
    private int myField = 3;

    public int setMyField(int i){ myField = i; }
    public int getMyField(){ return myField; }
}
Run Code Online (Sandbox Code Playgroud)

这将生成以下元数据:

   {
  "groups": [{
    "name": "myConfig",
    "type": "test.MyConfig",
    "sourceType": "test.MyConfig"
  }], 
  "properties": [
    {   
      "name": "myConfig",
      "type": "java.lang.Integer",
      "description": "myField description.",
      "sourceType": "test.MyConfig",
      "defaultValue": 3
    }   
  ],  
  "hints": []
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会有某种方式来写作MyConfig.getMyField().getDescription()并获得回报"myField description"。我还希望能够在 JSON 中添加其他元数据并以类似的方式检索它们。

Ste*_*oll 5

Spring Boot 附带了一个单独的模块来完成此任务。它在内部用于验证元数据一致性的工具,这也是 STS 支持的基础。

检查spring-boot-configuration-metadata项目。

如果将其添加到项目中,您可以轻松构建当前类路径中定义的密钥存储库:

Resource[] resources = new PathMatchingResourcePatternResolver()
    .getResources("classpath*:META-INF/spring-configuration-metadata.json");
ConfigurationMetadataRepositoryJsonBuilder builder = ConfigurationMetadataRepositoryJsonBuilder.create();
for (Resource resource : resources) {
    try (InputStream in = resource.getInputStream()) {
        builder.withJsonResource(in);
    }
}
ConfigurationMetadataRepository repository = builder.build();
Run Code Online (Sandbox Code Playgroud)