2017-02-13 6 views
0

次のような状況を想定しましょう。xmlのAutowire @Resourceを使って豆のリストを生成するには

<bean id="a" class="com.example.A" /> 
<bean id="b" class="com.example.B" /> 
<bean id="c" class="com.example.C" /> 
<bean id="d" class="com.example.D" > 
    <property name="myList" ref="myListBean"> 
</bean> 

とJava設定ファイル::春のXML設定ファイルで作成された豆があるので、@Resource D dの

@Configuration 
@ImportResource("path/to/beans.xml") 
class JavaConfiguration { 
    @Resource 
    A a; 

    @Resource 
    B b; 

    @Resource 
    D d; 

    @Resource 
    C c; 

    @Bean 
    List myListBean(){ 
     List l = new ArrayList(); 
     l.add(a); 
     l.add(b); 
     l.add(c); 
     return l; 
    } 
} 

は@Resource C Cの前では、ビーンズmyListBeanは "のみが含まれます{ a、b、null}を返します。私がそれを切り替え、@Resource CがDの前にあるなら、すべてが正しかった。その状況を避けるための良い習慣はありますか?フィールドの順序に依存せず、ヌルでBeanリストを作成しないようにしますか?

+0

Configurationクラスをお持ちの場合は、すべてのBeanをクリーナーとして定義することをお勧めします。しかし、beans-declarationにdepends-onフラグを置くことはできます。 –

+0

私がここに示した例はあまり実践的ではないことを完全に認識しています。それは私が実際に取り組んでいるプロジェクトのレガシーコードの一部です。私はこれまでより良いことができるかどうか疑問に思っています。私たちは将来リファクタリングを行いますが、これはもっと大きなケースです。 –

答えて

0

あなたが望むものを正確に行う方法はないと思います。

2つの間に依存関係がない場合、myListBeanの前にSpringが挿入することを保証することはできません。正しいmyListBeanを持つためにCが必要な場合は、依存関係が存在するはずです。

+0

それは私が思ったことです。私はそれを強制する方法があるかどうか疑問に思いました。ご回答ありがとうございます。 –

関連する問題