這兩者都是表示對其他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銷燬的