Wenn ich die Annotation @Qualifier
für eine Konstruktor-Abhängigkeitsinjektion verwenden wollte, hätte ich ungefähr Folgendes:
public class Example {
private final ComponentExample component;
@Autowired
public Example(@Qualifier("someComponent") ComponentExample component) {
this.component = component;
}
}
Ich kenne Lombok Annotation zur Reduzierung des Boilerplate-Codes und muss keinen Konstruktor wie folgt einbinden: @RequiredArgsConstructors([email protected]__(@Inject))
aber das funktioniert nur mit Eigenschaften ohne Qualifizierer.
Weiß jemand, ob es möglich ist, Qualifikationsmerkmale in @RequiredArgsConstructor(onConstructor = @__(@Autowired))
hinzuzufügen?
BEARBEITEN:
Es istENDLICHMÖGLICHdas zu tun! Sie können einen Dienst wie folgt definieren:
@Service
@RequiredArgsConstructor
public class SomeRouterService {
@NonNull private final DispatcherService dispatcherService;
@Qualifier("someDestination1") @NonNull private final SomeDestination someDestination1;
@Qualifier("someDestination2") @NonNull private final SomeDestination someDestination2;
public void onMessage(Message message) {
//..some code to route stuff based on something to either destination1 or destination2
}
}
Vorausgesetzt, Sie haben eine lombok.config-Datei wie diese im Stammverzeichnis des Projekts:
# Copy the Qualifier annotation from the instance variables to the constructor
# see https://github.com/rzwitserloot/lombok/issues/745
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
Dies wurde kürzlich in lombok 1.18.4 eingeführt. Ich habe darüber in meinem Blogpost geschrieben und bin stolz darauf, dass ich eine der Hauptantriebskräfte für die Implementierung des Features war.
Sie können den Frühlingstrick verwenden, um das Feld zu qualifizieren, indem Sie es mit dem gewünschten Qualifier ohne @Qualifier-Annotation benennen.
@RequiredArgsConstructor
public class ValidationController {
//@Qualifier("xmlFormValidator")
private final Validator xmlFormValidator;
Für mich scheint es das
@RequiredArgsConstructor([email protected]__(@Autowired))
funktioniert auch (wahrscheinlich verwende ich neueren lombok?)