13

背景:外部システムとのインターフェースとなる Bean がいくつかあります。開発の場合、外部システムをモックし、インターフェース Bean を多かれ少なかれ静的な応答を生成するいくつかの実装に置き換えると便利です。だから私がやっていることは、次のようなインターフェイス、実際の実装、およびスタブ実装を作成することです。

public interface ExternalService {
// ...
}

@Service
public class ExternalServiceImpl implements ExternalService {
// ...
}

@Service
@Primary
@Profile({"stub"})
public class StubExternalService implements ExternalService {
// ...
}

...これはうまく機能します。スタブ プロファイルが存在しない場合、スタブ Bean はまったく読み込まれません。存在する場合、 @Primary アノテーションにより、実際の実装にうまく置き換わります。

問題:しかし、同じインターフェースの 2 つの実際の実装を実際に取得した状況で初めて実行しました。そのうちの 1 つはプライマリとして定義されていますが、もう 1 つはアプリケーション コンテキストからロードして使用することもできます。

両方を置き換えるスタブ サービスを作成したいのですが、今回はスタブを @Primary として定義する古い方法は機能しません。プライマリ実装が既に 1 つあるからです。基本的に必要なのは、スタブ プロファイルが設定されているときにプライマリ Bean をロードしない方法ですが、それを正確に行う方法がわかりません。Web 検索やその他のスタック オーバーフローに関する質問は役に立たないようです。

4

1 に答える 1