在设置属性之前,将bean注入构造函数arg

时间:2013-01-31 14:54:58

标签: java spring

我有以下bean配置

<bean id="firstBean" class="...">
   <property name="someProperty" fef="someOtherBean"/>
</bean>

<bean id="secondBean" class="...">
   <constructor-arg ref="firstBean"/>
</bean>

问题是第二个bean试图从构造函数中的firstBean获取someProperty,但它还没有被注入。这两个课都来自图书馆,我无法改变。有没有办法可以在firstBean注入secondBean之前强制设置属性?

由于

修改

这个问题没有直接的解决方案,所以我用内部管理两个bean的工厂解决了它并提供了secondBean的实例

2 个答案:

答案 0 :(得分:2)

使第二个豆依赖于第一个。

<bean id="secondBean" class=".." depends-on="firstBean">

这样Spring会在实例化firstBean之前确保secondBean准备就绪。

另一种选择是使用FactoryBean或使用@Bean编程的bean定义。这样你就可以更好地控制实例化过程。

答案 1 :(得分:1)

您需要查看InitializingBean。看看doc

  

由Bean实现的接口,这些bean需要在BeanFactory设置了所有属性后做出反应:例如,执行自定义初始化,或仅检查是否已设置所有必需属性。

     

实现InitializingBean的替代方法是指定自定义init方法,例如在XML bean定义中。有关所有bean生命周期方法的列表,请参阅BeanFactory javadocs。