Spring Boot YML配置类继承

时间:2016-11-01 20:15:52

标签: spring-boot yaml

是否可以在Spring Boot YML配置类中使用继承?如果是这样,那将如何实现?

例如:

@ConfigurationProperties(prefix="my-config")
public class Config {
    List<Vehicle> vehicles;
}

类(或接口)“Vehicle”有两个实现:Truck和Car。所以YAML可能看起来像:

my.config.vehicles:
  -
    type: car
    seats: 3
  -
    type: truck
    axles: 3

1 个答案:

答案 0 :(得分:1)

我认为不可能(至少我不知道)。但是,您可以按如下方式设计代码:

将属性注入Builder对象

定义一个包含所有属性的对象,我们将其称为MyInterfaceReloader(或工厂,您选择其名称)。 从{Yaml注入VehicleBuilder。 然后,您可以在VehicleBuilders块中检索每个构建器的车辆。代码:

@PostConstruct

建设者:

@ConfigurationProperties(prefix="my-config")
@Component
public class Config {
    private List<VehicleBuilder> vehicles = new ArrayList<VehicleBuilder>();
    private List<Vehicle> concreteVehicles;

    public List<VehicleFactory> getVehicles() {
        return vehicles;
    }

    public List<Vehicle> getConcreteVehicles() {
        return concreteVehicles;
    }

    @PostConstruct
    protected void postConstruct(){
        concreteVehicles = vehicles.stream().map(f -> f.get())
                                   .collect(Collectors.<Vehicle>toList());
    }
}