将其他bean从xml定义注册到已初始化的应用程序上下文中

时间:2011-08-07 15:43:56

标签: java spring javabeans

我已经初始化了一个应用程序上下文,我还需要从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;
}

2 个答案:

答案 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();