使用 depends-on

如果一個 bean 是另一個 bean 的依賴項,這通常意味著一個 bean 被設置為另一個 bean 的屬性。通常,您可以使用基於 XML 的元數據中的 <ref/> 元素 或透過 自動裝配 來完成此操作。

但是,有時 bean 之間的依賴關係不太直接。一個例子是當類別中的靜態初始化器需要被觸發時,例如用於資料庫驅動程式註冊。depends-on 屬性或 @DependsOn 註解可以顯式強制一個或多個 bean 在使用此元素的 bean 初始化之前先初始化。以下範例使用 depends-on 屬性來表達對單個 bean 的依賴關係

<bean id="beanOne" class="ExampleBean" depends-on="manager"/>
<bean id="manager" class="ManagerBean" />

要表達對多個 bean 的依賴關係,請提供 bean 名稱列表作為 depends-on 屬性的值(逗號、空格和分號是有效的分隔符號)

<bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao">
	<property name="manager" ref="manager" />
</bean>

<bean id="manager" class="ManagerBean" />
<bean id="accountDao" class="x.y.jdbc.JdbcAccountDao" />
depends-on 屬性可以同時指定初始化時的依賴關係,以及在 singleton bean 的情況下,對應的銷毀時依賴關係。定義了與給定 bean 的 depends-on 關係的依賴 bean 會先被銷毀,然後才銷毀給定的 bean 本身。因此,depends-on 也可以控制關閉順序。