Spring depends-on介绍

<!-- redis配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxActive" value="20" /> 
    <property name="maxIdle" value="10" /> 
    <property name="maxWait" value="1000" />  
    <property name="testOnBorrow" value="true" />
</bean>
<!-- jedis pool配置 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy" depends-on="jedisPoolConfig">
    <constructor-arg ref="jedisPoolConfig" />  
    <constructor-arg value="127.0.0.1" />  
    <constructor-arg type="int" value="6379" />  
</bean>

上面的代码是jedisPool交给spring处理的代码,比普通bean配置多了一个属性depends-on,这里就记录一下depends-on属性的作用和注意点:

作用:depends-on用来指定Bean初始化及销毁时的顺序。

如上面jedis pool定义depend-on="jedisPoolConfig",这意味着Spring总会保证jedisPoolConfig在jedisPool之前实例化,总是在jedisPool之后再销毁。

适用的场景:用来确定bean定义中依赖关系不明确或者没有直接依赖关系时,指定bean在初始化或销毁时的明确顺序。

需要注意的特点

1、Spring管理的bean都是单例模式(singleton)

2、实例化对象应该顺序化的,比如A依赖B,B依赖C,C依赖D...

3、一个bean可以依赖多个bean,可以通过逗号(",")或者分号(";")来定义多个依赖对象:

<bean id=a Class="com.twovv.A" depends-on="b,c,d" />
<bean id=b Class="com.twovv.B" />
<bean id=c Class="com.twovv.C" />
<bean id=d Class="com.twovv.D" />

4、初始化依赖关系不允许形成环闭依赖,下面的依赖关系定义是错误的,Spring将无法确定该如何实例化:

<bean id=a Class="com.twovv.A" depends-on="b" />
<bean id=b Class="com.twovv.B" depends-on="a" />
原文地址:https://www.cnblogs.com/zhishan/p/3190771.html