我有以下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的实例
答案 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。