Spring:如何在Bean B加载完成后初始化Bean A?

时间:2011-09-21 12:31:00

标签: java spring

我有一个BeanA,其构造函数需要BeanB。 一旦BeanB被实例化(及其属性设置),我想调用BeanB.init()

有没有办法做到这一点?

另一种方法是在创建上下文中的所有bean之后调用BeanB.init()。

干杯!

2 个答案:

答案 0 :(得分:6)

您可以在init-method中使用applicationContext.xml来指定init方法。如果您希望bean在另一个之后进行实例化,则可以使用depends-on,即使任何ref元素(在此示例中为constructor-args内部)将隐式放置依赖项。

这将首先使用init方法初始化Bean B,并在完成后将其用作A的构造函数参数。

<!-- Bean B -->
<bean id="beanB" 
    class="classB"
    init-method="init"
/>

<!-- Bean A -->
<bean id="beanA" 
    class="classA"
    init-method="anotherInit">
        <constructor-arg ref="beanB"/>
    </bean>

答案 1 :(得分:1)

您可以使BeanB实现InitializingBean。这样做的缺点是你在BeanB和Spring之间创建了一个依赖,这不是很好。

我认为更好的方法是在构造函数中注入所有依赖项并调用init表单。这样,您就不需要将类绑定到Spring。