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销毁的
 

猜你喜欢

转载自blog.csdn.net/sinat_29774479/article/details/85990919
今日推荐