Spring depends-on介绍

2018-11-24  本文已影响0人  剑书藏于西
<!-- 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" />
  1. 初始化依赖关系不允许形成环闭依赖,下面的依赖关系定义是错误的,Spring将无法确定该如何实例化:
<bean id=a Class="com.twovv.A" depends-on="b" />
<bean id=b Class="com.twovv.B" depends-on="a" />
上一篇下一篇

猜你喜欢

热点阅读