アノテーション@Qualifier
をコンストラクター依存性注入に使用したい場合、次のようなものになります。
public class Example {
private final ComponentExample component;
@Autowired
public Example(@Qualifier("someComponent") ComponentExample component) {
this.component = component;
}
}
定型コードを削減するためのロンボクアノテーションを知っており、コンストラクタを含める必要がないのは次のようになります。@RequiredArgsConstructors(onConstructor=@__(@Inject))
ですが、これは修飾子のないプロパティでのみ機能します。
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
に修飾子を追加できるかどうかは誰でも知っていますか?
編集:
それは[〜#〜]最終的に[〜#〜][〜#〜]可能[〜#〜 ]そうするには!次のようにサービスを定義できます。
@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つであったことを誇りに思います。
スプリングトリックを使用して、@ Qualifierアノテーションなしで必要な修飾子を付けてフィールドを修飾することができます。
@RequiredArgsConstructor
public class ValidationController {
//@Qualifier("xmlFormValidator")
private final Validator xmlFormValidator;
私にとっては
@RequiredArgsConstructor(onConstructor=@__(@Autowired))
も動作しています(おそらく私は新しいロンボクを使用していますか?)