我有一个BeanA,其构造函数需要BeanB。 一旦BeanB被实例化(及其属性设置),我想调用BeanB.init()
有没有办法做到这一点?
另一种方法是在创建上下文中的所有bean之后调用BeanB.init()。
干杯!
答案 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。