Как мне подключить StaticListableBeanFactory с ClassPathXmlApplicationContext? - PullRequest
4 голосов
/ 09 июня 2010

В настройках моих тестовых случаев у меня есть этот код:

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

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

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

Ответы [ 2 ]

4 голосов
/ 09 июня 2010

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

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

GenericApplicationContext child = new GenericApplicationContext(context);

child.getBeanFactory().registerSingleton("foo", ...);
0 голосов
/ 09 июня 2010

Альтернативой, которую вы можете попробовать, является наличие Test.xml с определениями bean-компонента, который импортирует ваш common.xml:

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

<bean id="AnIdThatOverridesSomethingInCommon"/>

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...