参考:http://yanln.iteye.com/blog/2210723
这两者都是表示对其他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
举个例子:某个论坛拥有很多系统参数:
public class SystemSettings{
//缓存更新时间
public static int REFRESH_CYCLE = 60;
......
}
现在我们这些参数不再是写死的,需要在后台对这些参数进行管理:管理员可以对这些参数进行更改,并且会存储入库,系统启动的时候,会从数据库加载这些参数,假设加载参数的类是SystemInit
public class SystemInit{
public SystemInit(){
//模拟从数据库中加载的系统参数配置值
SystemSettings.REFRESH_CYCLE=100;
......
}
}
我们的系统现在有一个定时配置刷新器,用于定时刷新这些配置:
public class CacheManager{
public CacheManager(){
Timer t = new Timer();
TimerTask cacheTask = new CacheTask();
//缓存刷新定时处理
t.schedule(cacheTask,0,SystemSettings.REFRESH_CYCLE);
}
......
}
在这个例子中,我们的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销毁的
————————————————
版权声明:本文为CSDN博主「soputasmile11」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014473112/article/details/80662728