我已经初始化了一个应用程序上下文,我还需要从xml定义中加载另一个bean。
我可以执行applicationContext.getAutowireCapableBeanFactory(),但它只适用于某些Object的自动装配属性。
我无法通过XmlBeanDefinitionReader和ContextLoader找到如何做到这一点,因为正如您所看到的,只有公共方法是loadContext(String... locations)
并且它总是创建一个新的上下文。
public final ConfigurableApplicationContext loadContext(String... locations) throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("Loading ApplicationContext for locations [" +
StringUtils.arrayToCommaDelimitedString(locations) + "].");
}
GenericApplicationContext context = new GenericApplicationContext();
prepareContext(context);
customizeBeanFactory(context.getDefaultListableBeanFactory());
createBeanDefinitionReader(context).loadBeanDefinitions(locations);
AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
customizeContext(context);
context.refresh();
context.registerShutdownHook();
return context;
}
答案 0 :(得分:5)
您必须通过将创建的上下文设置为父上下文的子级来“合并”您的两个ApplicationContext并刷新父级:
GenericApplicationContext context = new GenericApplicationContext();
context.setParent(parentContext);
parentContext.refresh();
答案 1 :(得分:-1)
如果我理解正确,您希望将bean从xml位置加载到现有的应用程序上下文中。你就这样离开了:
ApplicationContext context;
BeanDefinitionReader beanDefReader = new XmlBeanDefinitionReader(context) ;
beanDefReader.loadBeanDefinitions(locations);
context.refresh();