Spring boot Spring引导YML配置类继承

Spring boot Spring引导YML配置类继承,spring-boot,yaml,Spring Boot,Yaml,可以在Spring Boot YML配置类中使用继承吗?如果是,将如何实现 例如: @ConfigurationProperties(prefix="my-config") public class Config { List<Vehicle> vehicles; } 我认为这是不可能的(至少据我所知是不可能的)。但是,您可以按如下方式设计代码: 将属性注入到生成器对象中 定义一个具有所有属性的对象,我们称之为车辆生成器(或工厂,您可以选择其名称)。 VehicleBuil

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

例如:

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

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

将属性注入到生成器对象中 定义一个具有所有属性的对象,我们称之为
车辆生成器
(或工厂,您可以选择其名称)。
VehicleBuilders
从Yaml注入。 然后,您可以在
@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());
    }
}

我感谢你的意见。这与我已经使用的解决方案类似。。。我只是希望有一个更精简的方法来做这件事。:-)
@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());
    }
}
public class VehicleBuilder {
    private String type;
    private int seats;
    private int axles;

    public Vehicle get() {
        if ("car".equals(type)) {
            return new Car(seats);
        } else if ("truck".equals(type)) {
            return new Trunk(axles);
        }
        throw new AssertionError();
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setSeats(int seats) {
        this.seats = seats;
    }

    public void setAxles(int axles) {
        this.axles = axles;
    }
}