Spring boot Spring引导YML配置类继承
可以在Spring Boot 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
@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;
}
}