2014-02-10 98 views
1

我有一個follofing情況INT「超級context.xml中」:初始化春豆儘可能晚

現在我想用在各種不同的項目這個「超級context.xml的」。說 「子context.xml的」 有:

<import resource="super-context.xml"/> 

<bean id="subConf1" class="ee.SubConf"> 
    <property name="confloc" value="classpath:ee/customconf1.sss" /> 
</bean> 

<bean id="subConf2" class="ee.SubConf"> 
    <property name="confloc" value="classpath:ee/customconf2.sss" /> 
</bean> 

... 

<bean id="subConfn" class="ee.SubConf"> 
    <property name="confloc" value="classpath:ee/customconfn.sss" /> 
</bean> 

ee.Conf的東西如下:

public class Conf ... { 
    ... 
    public void addSubConf(Resource res) { 
     //configuration resolving from res 
    } 
    ... 
} 

ee.SubConf的東西如下:

public class SubConf ... { 
    ... 
    @Autowired 
    ee.Conf superConf; 
    ... 
    public void setConfloc(Resource res) { 
     superConf.addSubConf(res); 
    } 
    ... 
} 

問題白羊座上下文負載。豆按以下順序初始化(由於在上下文文件中訂購):conf,service,subConf1,subConf2,... subConfn

但是服務bean實際上依賴於所有subConf bean(儘管這不能從上下文定義本身)。當在subConf bean定義之後添加「sub-context.xml」中的導入時,它會加載OK。

背後的原因是實現模塊化。是否有可能迫使bean儘可能遲的加載(例子中的「service」bean),或者儘快讓bean加載某些類型的bean(例子中的「subConf」bean),因爲在「 sub-context.xml「部分殺死了所希望的模塊化

或者它是一種更純粹的方式來實現這種模塊化?

回答

1

我會說,你是在一個錯誤的方式接近問題。 SubConf不應該依賴Conf開始。只需在Conf對象中注入SubConf對象的集合即可。

public class Conf { 

    @Autowired 
    private List<SubConf> subconfs; 
} 

您無需爲SubConf調用Conf類,這將刪除你的循環依賴的方式。

有關自動裝配的更多信息,請參閱Spring reference guide

+0

謝謝,這完全解決了我的問題。我沒有意識到你可以以某種方式自動裝載某些類型的所有bean – Vampnik

1

您可以使用depends-on

<bean id="beanOne" class="foo.Bar" depends-on="beanTwo" /> 
+1

或'@ DependsOn' –

+0

@Lance Java我認爲它,但我的問題是「super-context.xml」不知道將在各種項目中添加到它的自定義「sub-context.xml」。因此,沒有任何可靠的「依靠」的豆 – Vampnik