2016-04-25 2 views
1

У меня есть два контекста в моем весеннем модуль JavaКак слить два ApplicationContext друг с другом весной?

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
      "SpringBeans.xml"); 

и

ClassPathXmlApplicationContext helloContext = new ClassPathXmlApplicationContext("HelloBeans.xml"); 

с двумя различными файлами XML. Теперь мне нужно получить beans из HelloBeans.xml от context и beans от SpringBeans.xml от helloContext без обновления контекстов.

+0

Пожалуйста, обратите внимание - http://stackoverflow.com/questions/6973783/register-additional-beans-from -xml-definition-into-application-context-that-is-is – asg

+0

параметр родительский разрешает доступ только один раз, вы не можете получить доступ к bean-компонентам дочернего элемента через родителя –

ответ

0

Вы можете создать родительский пружинный файл контекста (например AllBeans.xml) и импортировать SpringBeans.xml и HelloBeans.xml:

<import resource="classpath:SpringBeans.xml" /> 
<import resource="classpath:HelloBeans.xml" /> 

И код станет:

ClassPathXmlApplicationContext SuperContext = new ClassPathXmlApplicationContext("AllBeans.xml"); 
+0

Я должен использовать только 'context 'и' helloContext' только –

0

Попытка ниже кода, используйте «helloContext "наконец:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("SpringBeans.xml"); 
ClassPathXmlApplicationContext helloContext = new ClassPathXmlApplicationContext("HelloBeans.xml"); 

helloContext.setParent(context); 
helloContext.setClassLoader(context.getClassLoader()); 
helloContext.refresh(); 
helloContext.registerShutdownHook(); 
+0

не полезно, все уже пробовало –

+0

В моем тестовом случае все нормально, пожалуйста, покажите свой код или конфигурацию. –

+0

Мне нужно получить beans из HelloBeans.xml из контекста и beans из SpringBeans.xml из 'helloContext', не обновляя контексты (в обоих направлениях или, другими словами, - наоборот) –

1

Не удалось найти то, что я искал, но это лучшее, что я мог бы сделать:

PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver(
      context.getClassLoader()); 
Resource resource = pathMatchingResourcePatternResolver 
      .getResource("classpath:HelloBeans.xml"); 
AutowireCapableBeanFactory factory = context 
      .getAutowireCapableBeanFactory(); 
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) factory; 
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(
      registry); 
xmlReader.loadBeanDefinitions(resource); 
Смежные вопросы