是否可以在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
我认为这是不可能的(至少我不知道)。然而,你可以这样设计你的代码:
将属性注入Builder对象
定义一个具有所有属性的对象,我们将其称为VehicleBuilder
(或工厂,您选择其名称)。VehicleBuilders
从Yaml注入。然后你可以在@PostConstruct
块中检索每个建设者的车辆。代码:
@ConfigurationProperties(prefix="my-config")
@Component
public class Config {
private List<VehicleBuilder> vehicles = new ArrayList<VehicleBuilder>();
private List<Vehicle> concreteVehicles;
public List<VehicleBuilder> 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;
}
}