0

Bean の読み込み順序は、依存関係と推移的な依存関係によって暗黙的に決定されるという事実を認識しています。

AwareBean の別のセットに適用したいある種のメタデータを提供するアノテーション付き Bean のセットがあるとします。したがって、N 個の Bean からすべてのメタデータを収集した後でのみ、AwareBean を後処理できます。通常org.springframework.beans.factory.config.BeanPostProcessor、この種のものに使用します。しかし、注文をどのように処理しますか?depends-on明示的に設定しても、ロード順序に関して依存関係よりも優先されないと思いますよね?

org.springframework.core.Ordered適用される beanPostProcessors の順序のみを決定するインターフェースがありますが、 Bean の順序は決定しません。

使用できますorg.springframework.beans.factory.config.BeanFactoryPostProcessorが、Bean 定義には Bean インスタンス化の前に十分な情報がありません。たとえば、beanDef.getBeanClass() Bean クラス名などを返します。

それは私がやりたいことをする方法を考えることができる他の方法ですか?

4

2 に答える 2

0

あなたはできる:

a) すべてのメタデータ Bean を に挿入しますBeanPostProcessor

b) ポストプロセッサが、起動時にアプリケーション コンテキストからすべてのメタデータ Bean をアクティブにフェッチするようにします。

それぞれの方法には長所と短所がありますが、効果は同じです。ポスト構築の後BeanPostProcessor、すべてのメタデータ Bean もポスト構築されます。

于 2012-09-29T16:45:24.447 に答える
0

org.springframework.beans.factory.config.BeanFactoryPostProcessorリフレクションを使用して注釈を取得できるように、クラスローダーでクラスを使用してロードすることで解決しました。その後、Springがクラスロードするときに、Beanクラスのクラスローダーがクラスがすでにロードされているかどうかをチェックし、ロードされている場合はロードしないため、何も壊すべきではないと思います。それ以外の場合は、それをロードします。

于 2012-09-29T21:06:07.553 に答える