2017-02-13 23 views
0

讓我們假設如下情況。在Spring XML配置文件有創建豆類:Autowire @Resource from xml並將它們用於生成bean列表

<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的配置文件:

@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 d d是@Resource C C之前,豆 'myListBean' 將只包含{ A,b,NULL}。如果我切換它並@資源C在D之前,那麼一切都是好的。有沒有什麼好的做法來避免這種情況,不依賴於字段順序,並防止用空值創建bean列表?

+0

如果你有一個Configuration類,我建議你在那裏定義所有的bean,只是因爲它更乾淨。然而,你可以在你的bean聲明中放置depends-on標誌。 –

+0

我完全意識到我在這裏展示的例子並不是很好的做法。這是我正在進行的項目中遺留代碼的一部分。我想知道目前爲止我能否做得更好。我們將來會做重構,但這是更大的情況。 –

回答

0

我不認爲有一種方法可以做到你想要的。

如果兩者之間沒有依賴關係,那麼您不能保證Spring會在myListBean之前注入C。如果你需要C有一個正確的myListBean,那麼應該有一個依賴。

+0

這就是我的想法。我只是想知道是否有辦法強制它。謝謝你的回答。 –

相關問題