Spring 5中如何等待allAppConfigs Bean初始化后再初始化pseudoBean1?
解决方案:确保
allAppConfigs初始化完成后再执行PseudoBean1的初始化逻辑 根据你描述的注入顺序问题,核心原因是PseudoBean1的@PostConstruct方法执行时,PseudoBean2的allAppConfigs属性还未完成注入。下面提供几种可行的解决思路:
方案1:让PseudoBean1直接依赖allAppConfigs,绕过PseudoBean2获取数据
既然populateMap最终需要的是allAppConfigs的数据,不如直接给PseudoBean1注入allAppConfigs,避免依赖PseudoBean2的初始化状态:
- 修改
PseudoBean1的populateMap方法,直接使用自身注入的allAppConfigs:
@PostConstruct protected void populateMap() { int i = 1; for(AppConfig config : allAppConfigs) { map.put("key" + i, config); i++; } }
- 在
myFrameWork/spring.xml中给PseudoBean1添加allAppConfigs的属性注入:
<bean id="pseudoBean1" class="PseudoBean1"> <property name="applicationConfigRegistry" ref="pseudoBean2" /> <property name="allAppConfigs" ref="allAppConfigs" /> </bean>
这种方式最直接,能确保populateMap执行时allAppConfigs已经完全初始化。
方案2:用depends-on强制PseudoBean2先完成初始化
如果必须通过PseudoBean2获取数据,可以给PseudoBean1添加depends-on="pseudoBean2",强制Spring在完成PseudoBean2的所有初始化步骤(包括属性注入、初始化方法)后,再初始化PseudoBean1:
修改myFrameWork/spring.xml中的PseudoBean1定义:
<bean id="pseudoBean1" class="PseudoBean1" depends-on="pseudoBean2"> <property name="applicationConfigRegistry" ref="pseudoBean2" /> </bean>
depends-on会确保pseudoBean2的setAllAppConfigs方法在PseudoBean1的@PostConstruct之前执行,这样populateMap就能拿到有效数据。
补充检查项
建议确认主spring.xml和myFrameWork/spring.xml的加载顺序,确保包含allAppConfigs的主配置文件先被加载,避免因配置文件加载顺序导致的依赖初始化延迟。
内容的提问来源于stack exchange,提问作者ReMadWeb
相关产品推荐
相关产品推荐

