我有一个BeanA,它的构造函数需要BeanB。 一旦BeanB被实例化(并设置了其属性),我想调用BeanB.init()。
有没有办法做到这一点?
另一种方法是在上下文中所有bean都被创建后调用BeanB.init()。
谢谢!
applicationContext.xml
中使用init-method
来指定初始化方法。如果您想让一个bean在另一个bean实例化后再实例化,您可以使用depends-on
,即使在constructor-args
中的任何ref
元素(例如本例中)都会隐式地放置一个依赖项。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>
你可以让BeanB实现InitializingBean。但这样做的缺点是,你会在BeanB和Spring之间创建一个依赖关系,这并不是很好。
我认为更好的方法是在构造函数中注入所有依赖项,并从中调用init。这样,你就不需要将你的类与Spring绑定在一起。
ref
元素都会产生隐式依赖关系。 - Xavi López