在Spring配置类中可以使用继承吗?如果是的话,如何做到这一点?
例如:
@ConfigurationProperties(prefix="my-config")
public class Config {
List<Vehicle> vehicles;
}类(或接口) "Vehicle“有两个实现:卡车和汽车。所以YAML看起来可能是:
my.config.vehicles:
-
type: car
seats: 3
-
type: truck
axles: 3发布于 2016-11-02 02:48:49
我认为这是不可能的(至少据我所知)。但是,您可以按照以下方式设计代码:
将属性注入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;
}
}https://stackoverflow.com/questions/40367935
复制相似问题