2010-06-09 3 views
3

В настройках моих тестов, у меня есть этот код:Как подключить StaticListableBeanFactory с помощью ClassPathXmlApplicationContext?

ApplicationContext context = new ClassPathXmlApplicationContext(
      "spring/common.xml" 
    ); 
    StaticListableBeanFactory testBeanFactory = new StaticListableBeanFactory(); 

Как подключить два таким образом, что тесты могут зарегистрировать бобы в testBeanFactory во время установки, а остальные приложения использует их вместо тех, которые определены в common.xml?

Примечание: Мне нужно смешать статический (common.xml) и динамическую конфигурацию. Я не могу использовать XML для последнего, потому что это означало бы писать> 1000 XML-файлов.

ответ

3

Вы можете использовать ConfigurableListableBeanFactory.registerSingleton() вместо StaticListableBeanFactory.addBean():

ApplicationContext context = new ClassPathXmlApplicationContext(
      "spring/common.xml" 
    ); 

GenericApplicationContext child = new GenericApplicationContext(context); 

child.getBeanFactory().registerSingleton("foo", ...); 
0

Альтернативы вы хотели бы попробовать, чтобы иметь test.xml с бин, которые импортируют common.xml:

<import resource="spring/common.xml"/> 

<bean id="AnIdThatOverridesSomethingInCommon"/> 

Вы можете иметь только одно определения бин с определенным идентификатором - в тот же файл это ошибка проверки XML, в разных файлах Spring переопределит определение.

Редактировать: Просто заметили, что это не подходит для вашего случая - я оставлю его здесь для полноты.

+0

Нет downvote из-за редактирования :-) –

+0

Спасибо - это на самом деле то, что я использую, но я предполагаю, что вы не хотите, если вы пытаетесь применить это к нагрузке существующих тестов. – cyborg