Ich begann, Konstruktor-Injektion in meinen Projekten zu verwenden, seit Spring Feldinjektion als veraltet deklarierte. Eigentlich fühlt sich der Code hübscher und strenger an, damit bin ich einverstanden. Aber ich stieß auf ein Muster, das scheint ein bisschen ... seltsam und ausführliche mir:Spring-Konstruktor-Injektion und Super-Call-Ausführlichkeit
Ich habe eine abstrakte Service-Bean-Klasse (mit @Service
Anmerkung), die, sagen wir 2 Abhängigkeiten hat, befindet sich direkt im Konstruktor injiziert:
Dann habe ich mehrere Dienste Bean-Klassen (immer noch mit @Service
Annotation) die abstrakte Erweiterung. Und ich weiß nicht, ob es einen anderen Weg, aber das ist, wo ich ein bisschen ausführlicher und repetitive mit finden die Abhängigkeiten für die Eltern, die in jedem Unter Klassenkonstruktors zu injizieren:
@Service
public class ServiceA extends AbstractService {
private final DepC depC;
@Autowired
public ServiceA(DepA depA, DepB depB, DepC depC) {
super(depA, depB);
this.depC = depC;
}
}
Ich wollte nur Wissen Sie, ob dies der richtige Weg ist und was Sie darüber denken?
warum sollte es verbose oder reptitive sein. Ja, für Klassen mit nur einem möglichen Konstruktor könnte man so argumentieren, aber was wäre, wenn es in 'AbstractService' mehrere verschiedene überladene Konstruktoren gäbe, wie würde 'ServiceA' bestimmen, welches man aufrufen soll. Aber ja, das ist der richtige Weg. – SomeJavaGuy
Das '@ Autowired' auf' AbstractService' tut nichts. – alexbt
Ich kann nicht sehen, warum Sie abstrakten Konstruktor mit '@ Autowired' kommentieren müssen.Es wird nicht benötigt, da die Felder in den Superklassenkonstruktor eingefügt werden. Alles andere sieht gut aus. –