web-dev-qa-db-ja.com

@RequiredArgsConstructor(onConstructor = @__(@ Autowired))に修飾子を追加することは可能ですか?

アノテーション@Qualifierをコンストラクター依存性注入に使用したい場合、次のようなものになります。

public class Example {

    private final ComponentExample component;

    @Autowired
    public Example(@Qualifier("someComponent") ComponentExample component) {
        this.component = component;
    }
}

定型コードを削減するためのロンボクアノテーションを知っており、コンストラクタを含める必要がないのは次のようになります。@RequiredArgsConstructors(onConstructor=@__(@Inject))ですが、これは修飾子のないプロパティでのみ機能します。

@RequiredArgsConstructor(onConstructor = @__(@Autowired))に修飾子を追加できるかどうかは誰でも知っていますか?

33
Pau

編集:

それは[〜#〜]最終的に[〜#〜][〜#〜]可能[〜#〜 ]そうするには!次のようにサービスを定義できます。

@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
   }

 } 

プロジェクトのルートに次のようなlombok.configファイルがある場合:

# 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

これは、最近のロンボク1.18.4で最近導入されました。ブログ記事でそれについて書きました。この機能の実装を推進している主な原動力の1つであったことを誇りに思います。

27
Nikola Yovchev

スプリングトリックを使用して、@ Qualifierアノテーションなしで必要な修飾子を付けてフィールドを修飾することができます。

@RequiredArgsConstructor
public class ValidationController {

  //@Qualifier("xmlFormValidator")
    private final Validator xmlFormValidator;

私にとっては

@RequiredArgsConstructor(onConstructor=@__(@Autowired))

も動作しています(おそらく私は新しいロンボクを使用していますか?)

サンプルコード

1
kecso