感谢所有帮助。如何等到bean“allAppConfigs”初始化然后初始化bean“pseudoBean1”?对于 PostConstruct-annotated-Method“populateMap”成员“allAppConfigs”需要带有值来填充地图。 我尝试了依赖和不同的命令,阅读spring 5 / 6手册/文档和InitializingBean接口。我认为资源导入为时已晚。也许有一个好的解决方案。预先感谢。
关于Spring注入时的顺序:
spring.xml:
...
<!-- Objects imported as AppConfig.class -->
<import resource="folder/*.xml">
<util:list id="allAppConfigs" value-type="edu.somepackage.models.AppConfig">
<ref bean="systemAppConfig">
<ref bean="someAppConfig">
<ref bean="springAppConfig">
</util:list>
...
myFrameWork/spring.xml:
<bean id="pseudoBean2" class="PseudoBean2">
<property name="allAppConfigs" ref="allAppConfigs" />
</bean>
<bean id="pseudoBean1" class="PseudoBean1">
<property name="applicationConfigRegistry" ref="pseudoBean2" />
</bean>
public class PseudoBean2 {
private List<AppConfig> allAppConfigs;
public void setAllAppConfigs(List<AppConfig> allAppConfigs) {
this.allAppConfigs = allAppConfigs;
}
public List<AppConfig> allAppConfigs() {
return this.allAppConfigs;
}
}
public class PseudoBean1 {
private PseudoBean2 applicationConfigRegistry;
private Map<String, AppConfigImpl> map = new HashMap<>();
private List<AppConfig> allAppConfigs = new ArrayList<>();
public void setApplicationConfigRegistry(PseudoBean2 applicationConfigRegistry) {
this.applicationConfigRegistry = applicationConfigRegistry;
}
public void setAllAppConfigs(List<AppConfig> allAppConfigs) {
this.allAppConfigs = allAppConfigs;
}
@PostConstruct
protected void populateMap() {
int i = 1;
for(AppConfig config : applicationConfigRegistry.allAppConfigs()) {
map.put("key" + i, config);
i++;
}
}
}
如果您正确配置了依赖项,则对于像这样的简单用例,您不必使用任何特殊属性,例如
depends-on
和 order
。
Spring 自动解析依赖关系并以正确的顺序加载极其复杂的应用程序。如果应用程序上下文导入了两个 XML,那么这应该可以正常工作。
您需要确保应用程序上下文确实拥有您需要的一切。
此外,如果这是一个Web应用程序,Spring Boot会自动创建一个带有自己的ServletContext的DispatcherServlet。在这种情况下,您需要确保导入对于上下文层次结构有意义。
例如,如果根上下文声明
pseudoBean2
但 allAppConfigs
的定义位于 servlet 上下文中,则它将不起作用,因为 servlet 上下文是根上下文的子级。