エイリアスの使用法について混乱しています。エイリアスとは何か、それがどのように使用されているかは理解していますが、Bean 定義で名前を使用する場合とどう違うのかわかりません。
<bean id="xyx" name="abc,def" .. />
<alias name="xyx" alias="pqr"/>
abc または def を使用できるのにエイリアスを使用するのはなぜですか?
エイリアスの使用法について混乱しています。エイリアスとは何か、それがどのように使用されているかは理解していますが、Bean 定義で名前を使用する場合とどう違うのかわかりません。
<bean id="xyx" name="abc,def" .. />
<alias name="xyx" alias="pqr"/>
abc または def を使用できるのにエイリアスを使用するのはなぜですか?
私の考えでは、Beanエイリアシングは、Bean名を操作できない大規模なシステムで役立つ可能性があります。システムの自分の部分に固有の独自の名前(エイリアス)を作成するオプションがあります...
Springのドキュメント(3.0.x)から http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/
...単一のBeanに複数の名前を付けることが望ましい場合があります。これはBeanエイリアシングとも呼ばれます...
したがって、複数の名前を作成したり、エイリアシングを行ったりすることは同じです。
モジュラーアプリケーションのどこかですでに定義されているいくつかの Bean をカスタマイズしたい場合 (たとえば、各モジュールは Spring プロジェクトです)、Bean はサードパーティのフレームワーク/API またはチームによって定義されている可能性があります。その場合、Spring プロジェクト内でのみ、他のモジュール (プロジェクト) を変更せずにカスタマイズされたバージョンを呼び出す必要があります。これを行うには、本当に強力な機能である Spring 構成にエイリアスを追加するだけです。
<alias alias="globalBeanService" name="customizedBeanService" />
したがって、Spring が globalBeanService への呼び出しを見つけるたびに、特定のモジュール内に CustomizedBeanService を挿入します。この機能がなければ、すべてのクラスを調べて手動で Bean を変更する必要があります!!
エイリアスが設定された Bean は、エイリアスが設定されていない Bean よりも常に優先度が高く、同じエイリアスを持つ別の Bean がある場合は、最後に宣言された Bean が優先されます。言い換えれば、エイリアス化された Bean は、エイリアス化されていない Bean をオーバーライドします。これは、大きなプロジェクトを作成する場合、またはプロジェクトの拡張機能を構築していて、元の Bean 定義に触れたくない場合に特に役立ちます。
エイリアスには、複数の名前にはない特定の使用シナリオがあります。
プロジェクトに複数の構成 xml ファイルがあり、そのほとんどが同僚によって作成されており、独自の config.xml ファイルを追加する必要があるとします。を使用すると、同僚の構成ファイルに触れることなく、別の構成ファイルで定義された Bean を別の名前で参照できます。これは、構成にとってより意味のあるものかもしれません。
最近、エイリアスが問題を簡単に解決する別のユースケースを見つけました。
serverProperties
自動構成がアクティブな場合、Spring Boot は、現在 Web アプリを実行しているサーバーに関する情報にアクセスするために使用できるBean を提供します。
統合テスト (つまり、@SpringBootTest
アノテーションが存在する場合) では、同じ Bean が名前で利用可能ですorg.springframework.boot.autoconfigure.web.ServerProperties
。
もちろん、統合テストに別のプロファイルを使用することは可能ですが、それには複数の場所で構成を手動で変更する必要があります。ただし、単純に追加するだけで
<alias name="serverProperties" alias="org.springframework.boot.autoconfigure.web.ServerProperties"/>
統合テストと本番環境で同じ構成ファイルを使用できます。
これは Spring Boot のバグかもしれませんが、エイリアスは新しいリリースを待たずに問題を簡単に解決します。そして、間違いなく、ブート構成を自分で変更する可能性はありません。