1. ホーム
  2. java

RequiredArgsConstructor(onConstructor = @__(@Autowired)) に修飾語を追加することはできますか?

2023-11-18 03:18:39

質問

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

public class Example {

    private final ComponentExample component;

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

Lombokのアノテーションで、定型的なコードを減らし、コンストラクタを含めなくていいのは、以下のようになりますね。 @RequiredArgsConstructors(onConstructor=@__(@Inject)) しかし、これは修飾子を持たないプロパティでのみ機能します。

で修飾子を追加することが可能かどうか、誰か知っていますか? @RequiredArgsConstructor(onConstructor = @__(@Autowired)) ?

どのように解決するのですか?

EDITです。

それは 最終的に 可能です を実行します! こんな風にサービスを定義してもらうことができます。

@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

この機能は最新のlombok 1.18.4で導入されました。私はこのことについてブログで書きましたし、この機能の実装を推進する主要な原動力の1つであったと自負しています。