明示的な構成なしでBeans Post Process Orderを変更します
-
11-12-2019 - |
質問
Beanロードの順序が依存関係と推移的な依存関係によって暗黙的に決定されるという事実を知っています。
想像してみて、別のAwarebeansの別のセットに適用するいくつかの種類のメタデータを提供する注釈付きBeanのセットがあります。それで、N Beanからすべてのメタデータを収集した後にのみ、AwoyBeansを処理することができます。あなたは通常この種のもののためにorg.springframework.beans.factory.config.BeanPostProcessor
を使用します。注文に対処する方法は? depends-on
を設定しても、ロードオーダーの依存関係を明示的に超えてはいけないと思います。
適用されているBeanPostprocessorsの順序を決定するだけでなく、Beanの順序ではないインターフェイスorg.springframework.core.Ordered
があります。
org.springframework.beans.factory.config.BeanFactoryPostProcessor
を使用できますが、Beanの定義にはBeanのインスタンス化前の情報がありません。たとえば、beanDef.getBeanClass()
はBeanクラス名などを返します。
あなたが私が欲しいものをする方法を考えることができるその他の方法は?
解決 2
ClassLoaderによるorg.springframework.beans.factory.config.BeanFactoryPostProcessor
とロードクラスを使用して、アノテーションをつかむことができるように解決しました。なぜならSpringがクラスロードになっていると、Bean ClassLoaderがすでにロードされているかどうかをチェックすると、そのクラスがロードされているかどうかを確認します。それ以外の場合はロードします。
他のヒント
:
a)BeanPostProcessor
にすべてのメタデータBeanを注入します。
b)あなたのPostProcessorは起動時にアプリケーションコンテキストからすべてのメタデータBeanを積極的に取得させます。
毎回長所と短所を持っていますが、効果は同じです.BeanPostProcessor
PostConstructionの後、すべてのメタデータBeanはすでに既に延期されています。