spring初始化bean的问题

如题, 工作中遇到一个类似"循环引用"的问题:

<bean id="A" class="com.xxx.A"  init-method="initA">
        <property name="B" ref="B"></property>
</bean>

<bean id="B" class="com.xxx.B"  init-method="initB">
</bean>

上面的xml加载初始化 "A" bean的时候, 配置ref B 会依据无参构造器创建“B”Bean, 并暴露一个exposedObj提前返回, 此时initB未执行 , 继续完成"A" bean 的创建, 执行initA , 而initA需要initB提供的一些变量, 就会发生空指针异常.

解决方法一: 先初始化B bean, 还有其他方法吗?

3个回答

将initA的代码转移到afterPropertiesSet函数中去做,这个函数在InitializingBean接口中定义

ldp1990
DooWhop 焙焙龙, 非常感谢. 请问资料显示afterPropertiesSet是在init-method之前执行, B bean还是只执行到无参构造器实例化这一步, 好像还是不行的吧? 我先验证一把. 再次感谢.
接近 2 年之前 回复

在创建一个配置文件 主配置文件加载B 引用配置文件加载A

ldp1990
DooWhop 嗯嗯, 谢谢. 这是先完成B bean初始化的思路, 请问有没有初始化A bean配置属性时等待B bean彻底初始化结束后的方法呢? 再次感谢.
接近 2 年之前 回复

Spring 中如何控制2个bean中的初始化顺序? https://zhuanlan.zhihu.com/p/30112785 ---大家可以看看

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问