我有类似here的要求。即从我的项目中,我通过maven引用一个库项目并从该库项目初始化xml bean。但就我而言,我必须从多个上下文文件初始化bean。我还要求动态决定上下文文件的名称,如{dbName} Context.xml。我必须维护这些文件的正确顺序,因此我通过this之类的代码初始化所有这些文件中的bean。
这部分适用于我,它可以初始化bean,但不是急切的。 Beans懒洋洋地在这里初始化,即使在xml配置中,' lazy-init' attribute设置为false。
示例代码:
@Configuration
public class MyConfig{
@Autowired
GenericApplicationContext context;
@PostConstruct
public void loadXmlContext() throws IOException {
String dbName = getDatabaseName();
Resource[] resources = getResourcesFromContext(
"context1.xml",
"context2.xml",
dbName+"Context.xml",
"context3.xml");
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
reader.setBeanClassLoader(context.getClassLoader());
for (Resource r : resources) {
reader.loadBeanDefinitions(r);
}
}
private Resource[] getResourcesFromContext(String... contextFiles) throws IOException {
PathMatchingResourcePatternResolver pmrl = new PathMatchingResourcePatternResolver(context.getClassLoader());
Resource[] resources = new Resource[0];
for(String contextFile: contextFiles) {
resources = ArrayUtils.addAll(resources, pmrl.getResources(contextFile));
}
return resources;
}
}
问题:在这种情况下,如何从xml上下文文件eagery加载bean?