bean屬性ref和depend-on的區別及應用

這兩者都是表示對其他bean的依賴,但是ref常用的情況是這個bean作爲當前bean的屬性,比如:

<bean id="a" class="ClassA"/>
<bean id="b" class="ClassB">
<property name="aref" ref="a" />
</bean>

這是很強的一個依賴關係了,但是有時候依賴關係並不會這麼明顯,我們依賴的bean也許並不是我們當前bean的屬性,比如當前bean B,我們需要初始化一些值,這些值的初始化是依賴於bean A的,那麼我們的bean B肯定是依賴於A的,但是A並不是B的什麼,這個時候用ref肯定是不合適的,就可以用depends-on


舉個例子:某個論壇擁有很多系統參數:

當緩存清理工具需要設置的緩存是從另一個配置參數的bean中獲取的,配置參數bean就需要提前初始化
在這個例子中,我們的CacheManager如果想要獲取最新配置,必須用到SystemSettings的值,而這個值需要用到我們的Bean SystemInit,SystemInit並不屬於我們的CacheManager的屬性或者其他的什麼。但是邏輯上SystemInit是要先於CacheManager加載的,這個時候就可以用dependds-on了:

<bean id="sysinit" class="SystemInit">  

<bean id="manager" class="CacheManager"  depends-on="sysinit"/> 

除此之外,使用了depends-on的時候,依賴他人的bean是先於被依賴bean銷燬的 

總結:depends-on適用於表面上看起來兩個bean之間沒有使用屬性之類的強連接的bean,但是兩個bean又確實存在前後依賴關係的情況,使用了depends-on的時候,依賴他人的bean是先於被依賴bean銷燬的
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章