2010-07-06 98 views
31

我有多個上下文文件。要求是:一個特定的Bean(它使一些配置更改)在其餘的bean中首先被初始化。Spring Bean初始化的順序

有沒有辦法讓這個bean首先被加載?

一種選擇是使用依賴-on`屬性。但是這需要更新所有剩下的bean,因此似乎不是最好的解決方案。

我們有更好的選擇?

回答

14

恕我直言,你應該等到他們解決https://jira.spring.io/browse/SPR-3948

一個可能的方法是使用取決於-on屬性。但是,我不想在所有剩下的bean中添加這個屬性(這可能是我的最後一招)。

實際上,您不需要在每個applicationContext.xml中使用依賴關係和每個BEAN。

使用<import />在所有「低lvel」 applicationContext.xml中導入最上面的applicationContext.xml。

並且除了最先加載的<bean />之外,在每個bean定義中僅在最高層applicationContext.xml中使用depends-on屬性。

+0

是否意味着導入標籤的depends-on屬性? – 2010-07-09 02:40:43

+0

我的意思是在較低級別的appContext.xml中使用來導入頂級appContext.xml。並且僅在頂級appContext.xml中使用depends-on屬性 dira 2010-07-09 05:18:23

+0

init-order不會像依賴關係那麼糟糕。有人可以驗證負數是否可用於初始訂單。如果默認值是1或0? – 2012-03-06 16:13:07

-3

我不是一個春天的專家,可能會被某個人喊出來。但在那之前......

哪裏有空間,不確定性,我猜春負載/在它遇到它在配置文件中的順序應用的東西。因此,作爲第一個也是最簡單的近似,我會盡量確保您想要首先初始化的東西是配置文件中的第一個東西。

如果這一切都層次,那麼你會希望你的「第一次」的配置要麼是在「主」文件中的其他人在被調用之前或者如果可能的話在第一調用的文件。

+4

彈簧加載某些類型的豆類(如BeanPostProcessor的)的比別人更早,同時也解決了依賴樹。我認爲以某種方式嘗試「排序」聲明是沒有用的 - 它完全不起作用,或者在對bean進行任何更改後立即中斷。 – 2013-07-10 12:19:44

1

在纔有意義,要求豆的順序,通常對技術豆類(如添加的MBean)業務豆(就像它在http://jira.springframework.org/browse/SPR-3948提議)

使用BeanPostProcessor的是另一種方式,以提供一些前裝載在你的豆子訂購。檢查AbstractApplicationContext.refresh()以查看它是如何實施的。