Зарегистрировать дополнительные bean-компоненты из определения xml в контексте приложения, который уже инициализирован - PullRequest
0 голосов
/ 07 августа 2011

У меня уже инициализирован контекст приложения, и мне нужно дополнительно загрузить в него другие bean-компоненты из определения xml.

Я могу сделать 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 ]

5 голосов
/ 08 августа 2011

Вы должны «объединить» два ваших ApplicationContext, установив созданный вами контекст как дочерний родительский контекст и обновить родительский:

GenericApplicationContext context = new GenericApplicationContext();
context.setParent(parentContext);
parentContext.refresh();
0 голосов
/ 08 августа 2011

Если я правильно понимаю, вы хотите загрузить bean-компоненты из местоположений xml в уже существующий контекст приложения.Вы просто идете, как это afaik:

  ApplicationContext context;

  BeanDefinitionReader beanDefReader = new XmlBeanDefinitionReader(context) ;
  beanDefReader.loadBeanDefinitions(locations);
  context.refresh();
...