假设我有这些弥补的课程(顺便说一句,我对汽车一无所知)
@Singleton
class ElectricEngine implements Engine {
}
class Vehicle {
private final Engine engine;
Vehicle(Engine engine, SteeringSystem ss, ...) {
this.engine = engine;
}
}
一般情况下,子类都是这样构建的
class Tesla extends Vehicle {
@Inject
Tesla(ElectricEngine engine, SteeringSystem ss) {
super(engine, ss);
}
}
我不希望孩子指定
Engine
并拥有诸如 之类的课程
class ElectricVehicle extends Vehicle {
ElectricVehicle(SteeringSystem ss) {
super(electricEngine???, ss);
}
}
class Tesla extends ElectricVehicle {
@Injected
Tesla(SteerByWireSystem ss) {
super(ss);
}
}
问题是,
ElectricVehicle
如何才能将ElectricEngine
对象传递给其父对象?
我考虑过进行现场注入,但不确定这是否可以解决问题,并且基于this也不喜欢它。
有什么想法吗?
如果你想使用注入来处理你的bean,你需要注入一些东西。
单例的另一种纯 Java 解决方案是让类拥有它自己的单例实例:
class ElectricEngine implements Engine {
private static ElectricEngine instance;
public static ElectricEngine getElectricEngine() {
if(instance == null) {
instance = new ElectricEngine();
}
return instance;
}
}
class Tesla extends ElectricVehicle {
@Injected
Tesla(SteerByWireSystem ss) {
super(ElectricEngine.getElectricEngine(), ss);
}
}