web-dev-qa-db-de.com

kann ich in @RequiredArgsConstructor Qualifizierer hinzufügen (onConstructor = @__ (@ Autowired))?

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?

17
Pau

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.

7
Nikola Yovchev

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?)

Beispielcode

0
kecso