Spring中的ref vs依赖属性

时间:2012-09-30 17:44:13

标签: java spring

我对Spring中的ref和依赖属性感到困惑。我读了spring文档,但我仍然感到困惑。我想知道两者之间的确切区别,在哪种情况下应该使用哪一个。

3 个答案:

答案 0 :(得分:11)

另外, http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/annotation/DependsOn.html

取决于 - >     当前bean所依赖的bean。     指定的任何bean都保证在此bean之前由容器创建。     在bean没有通过属性或构造函数参数显式依赖于另一个bean的情况下很少使用,而是依赖于另一个bean初始化的副作用。

在上面提供的答案中,以下陈述是错误的,

“'依赖'属性中定义的从属bean将在相关bean被销毁之前被销毁”

首先销毁主bean,然后销毁依赖bean。

这是我的测试结果,

主要类的破坏被称为。

调用依赖的破坏。

答案 1 :(得分:4)

也许需要依赖的情况的一个例子会有所帮助。我使用Spring来加载和连接我的bean。这是一个示例bean定义:

<bean id="myBean" class="my.package.Class">
    <property name="destination" value="bean:otherBeanId?method=doSomething"/>
</bean>

<bean id="otherBeanId" class="my.package.OtherClass"/>

请注意,属性值是一个字符串,它引用了 otherBeanId 。由于解析了这个变量的方式,Spring没有学习依赖关系,所以它可能会破坏 otherBeanId 然后 myBean 。这可能会让 myBean 暂时处于破碎状态。

我可以使用取决于如下修复此问题:

<bean id="myBean" class="my.package.Class" depends-on="otherBeanId">
    <property name="destination" value="bean:otherBeanId?method=doSomething"/>
</bean>

答案 2 :(得分:0)

在某些情况下,一个bean可能是另一个bean中的属性,即;在这种情况下,我们使用具有ref属性的bean来将属性bean作为属性直接包含在bean定义中。

在某些情况下,可能需要成功实例化另一个bean才能成功创建另一个bean,而另一个bean不是所定义bean的属性,在这种情况下,我们使用depends-on属性。