2016-03-28 26 views
0

私は、豆のセットの操作をappContext.getBeanDefinitionNames()から検索して呼び出すことを試みています。その操作を呼び出す順序は、1つのbeanの操作として重要です。ApplicationContext.getBeanDefinitionNames()によって返される順序に影響する方法は?

私はこの順序を設定しようとしました。

1.PriorityOrdered interface 
[email protected] annotation 
3.BeansPostProcessor interface 

しかし、どれもリストの順序に影響しないようです。デフォルトでは、クラスパスで遭遇した順序でBeanを返します。

2つの質問。

1.上記の方法でBeanの初期化の順序を設定するとどういう意味ですか?

2. appContext.getBeanDefinitionNames()を使用してBean名の検索順序を変更することはできますか?

答えて

0

本当にあなたの問題があなたの質問から分かりませんでした。 Beanを初期化する順序を変更するか、設定で定義されている順番でBeanの名前を取得しますか?

1.上記の方法でBeanの初期化の順序を設定するとどういう意味ですか?

ApplicationContextは、アプリケーションのBeanのインスタンス化、構成および配線を担当します。 ApplicationContextは、ライフサイクルの初期段階で設定(XML、注釈、Javaコード設定など)を読み込み、それらのBeanをインスタンス化します。 Beanを初期化する順序について話しているときは、ApplicationContextでインスタンス化されるBeanと、後でインスタンス化されるBeanを意味します。あなたは私たちがAのインスタンスが必要Bをインスタンス化するために見ることができるように

class A { 
} 

class B { 

    private A a; 

    public B(A a) { 
     this.a = a; 
    } 

} 

:たとえば、あなたはBは、以下のようにAに依存する二つのクラスABを持っている場合。現在のBeanが依存する

DEPENDSON

豆。指定されたBeanは、このBeanの前にコンテナによって作成されることが保証されています。 (DependsOn Documentation

BeanPostProcessor

BeanPostProcessorは、あなたがそれがコンテナによってインスタンス化された後に変更することができます。私はあなたがBeanポストプロセッサーで望むものを達成できるとは思わない。

PriorityOrderedをPriorityOrdered Docs

Orderedインタフェースの拡張です。ドキュメントから:

は、コレクションなどで注文可能なオブジェクトで実装できるインターフェイスです。実際の順序は、優先順位として解釈される であり、最初のオブジェクト(最も低い値は オーダーの値)が最も高い優先順位を持ちます。

このインターフェイスの優先度マーカーは、 PriorityOrderedです。 PriorityOrderedオブジェクトによって表される順序値 は、通常の順序で表される同じ順序値の前に常に適用されます。 オブジェクト。 PriorityOrderedオブジェクトによって表さ 順序値は常に普通順序オブジェクトで表さ 同じ順序値の前に適用されます。優先順位を発現OrderedインタフェースのPriorityOrdered

拡張のドキュメントから

。これは、最初に であるオブジェクトに使用される であり、残りのオブジェクトを取得することなく、優先順位オブジェクトを最初に認識することが重要です。典型的な例:ApplicationContextの郵便番号 ポストプロセッサ

また、私はこのインターフェースからもあなたが望むものを達成することはできないと思います。

2. appContext.getBeanDefinitionNames()を使用してBean名の取得順序を変更することはできますか?

getBeanDefinitionNames()メソッドは、現在のファクトリ(Docs)で定義されているすべてのBeanの名前を含む文字列の配列を返します。

関連する問題