具有抽象类型的Spring嵌套配置

时间:2018-06-26 20:36:50

标签: java spring spring-boot spring-config

我正在尝试使用Spring Boot生成一个嵌套的配置列表,该列表可以具有不同的配置选项。

在下面的示例中,SubConfig包含一个类型字段,该字段应该是config正在创建的类的类路径。我可以使用非抽象的SubConfig类获取子配置列表,并从中获取类型,但是在那之后,我迷失了如何使用填充的配置值实际创建SubClass1或SubClass2。

此配置用于通过我定义的bean创建新的自动装配对象。

@Configuration
@ConfigurationProperties(prefix = "com.engineal")
public class BaseConfig {
    private List<? extends SubConfig> subConfigs;

    public List<? extends SubConfig> getSubConfigs() {
        return subConfigs;
    }

    public void setSubConfigs(List<? extends SubConfig> subConfigs) {
        this.subConfigs = subConfigs;
    }

    public static abstract class SubConfig {
        private Class<?> type;

        public Class<?> getType() {
            return type;
        }

        public void setType(Class<?> type) {
            this.type = type;
        }
    }

    public static class SubConfig1 extends SubConfig {
        private String field1;

        public SubConfig getField1() {
            return field1;
        }

        public void setField1(String field1) {
            this.field1 = field1;
        }
    }

    public static class SubConfig2 extends SubConfig {
        private String field2;

        public SubConfig getField2() {
            return field2;
        }

        public void setField2(String field2) {
            this.field2 = field2;
        }
    }

    @Bean
    public MyClass getMyClass() {
        return new MyClass(subConfigs);
    }
}

这是我所需应用程序的示例。yml:

com:
  engineal:
    sub-configs:
      - type: com.engineal.BaseConfig.SubConfig1
        field1: Value1
      - type: com.engineal.BaseConfig.SubConfig1
        field1: Value2
      - type: com.engineal.BaseConfig.SubConfig2
        field2: Value3

0 个答案:

没有答案