16

春の豆の別名が何を意味するのか知っています。しかし、エイリアスを利用するためのユースケースを知りたいです。なぜ誰かがその名前の代わりにエイリアス名を使用してBeanを参照したいのですか?

前もって感謝します。

4

4 に答える 4

7

私が見た使用法は次のとおりです。特定のインターフェース(SomeBean)の2つのインスタンスがあります。1つは環境A用、もう1つは環境B用です。したがって、2つのBeanを定義します。1つは「someBeanForA」という名前で、もう1つは「 someBeanForB」。

このSomeBeanを注入する必要があるBeanは、どちらを使用する必要があるかを認識していません。環境によって異なります。したがって、エイリアスを使用します。

@Autowired
@Qualifier("someBeanAlias")
private SomeBean someBean;

環境Aにデプロイする場合、XMLファイルのエイリアスはsomeBeanAを指します。環境Bにデプロイする場合、XMLファイルのエイリアスはsomeBeanBを指します。

于 2012-11-04T17:27:42.430 に答える
6

リファレンスドキュメントはそれを非常によく説明していると思います:

Bean定義自体では、id属性で指定された最大1つの名前と、name属性内の他の任意の数の名前の組み合わせを使用して、Beanに複数の名前を指定できます。これらの名前は、同じBeanと同等のエイリアスにすることができ、アプリケーション内の各コンポーネントが、そのコンポーネント自体に固有のBean名を使用して共通の依存関係を参照できるようにするなど、状況によっては役立ちます。

ただし、Beanが実際に定義されているすべてのエイリアスを指定することは必ずしも適切ではありません。他の場所で定義されているBeanのエイリアスを導入することが望ましい場合があります。これは、構成が各サブシステム間で分割され、各サブシステムが独自のオブジェクト定義のセットを持っている大規模なシステムでよく見られます。XMLベースの構成メタデータでは、要素を使用してこれを実現できます。

具体的な例としては、複数のアプリケーションのシングルサインオンモジュールで認証用のエントリポイントを定義する必要がある場合があります。これを単一のSpringBean定義で定義し、特定のアプリケーションでエイリアスを作成して、認証エントリポイントとして使用します。

于 2012-11-04T17:27:43.643 に答える
2

springframeworkドキュメント自体に例があります。

具体的な例として、コンポーネントAがそのXMLフラグメントでcomponentA-dataSourceと呼ばれるDataSourceBeanを定義する場合を考えてみます。ただし、コンポーネントBは、データソースをXMLフラグメント内のcomponentB-dataSourceとして参照します。また、メインアプリケーションであるMyAppは、独自のXMLフラグメントを定義し、3つのフラグメントすべてから最終的なアプリケーションコンテキストをアセンブルし、データソースをmyApp-dataSourceとして参照します。

于 2012-11-04T17:30:03.533 に答える
2

プロジェクトでエイリアスを使用しましたが、これを使用した理由は

ユースケースの場合、アーキテクチャは、BeanIDがデータベースマスターテーブルの列に記載されているようなものです。したがって、フローが呼び出されると、テーブルが読み取られ、列に指定されているのと同じ名前のBeanがロードされます。Bean定義は、jarの一部であるapplicationContextに存在し、それを変更することはできません。

場合によっては、テーブル列のBean名を変更する必要がありましたが(命名規則を改善するため)、コンテキストBean定義を変更できないため、エイリアスを使用して新しい名前を古いBeanIDにマップしました。

これは、複数の環境のシナリオでも役立ちます。エイリアスが存在する場合、各環境で列の値を更新するためにスクリプトを実行する必要はありません。

于 2013-10-16T08:59:20.633 に答える