Динамическая пружина впрыска зависимостей - PullRequest
0 голосов
/ 15 июня 2011

У меня есть следующий код внутри моего класса

public void startListeners() throws Exception {
        List<QueueConfiguration> queueConfigs = queueConfigResolver.getQueueConfigurations();
        for(QueueConfiguration queueConfig : queueConfigs){
            //TODO : work on this make it more testable
            ICustomListener readerListener = new MyCustomListener(queueConfig);
            readerListeners.add(readerListener);
            readerListener.start();
        }

    }

Я использую Spring для внедрения зависимостей (не в этом случае, а в целом). Теперь есть две проблемы с этим кодом.

  1. Я не могу поставить макет для каждого из созданных слушателей во время тестирования.
  2. Я не хочу использовать ApplicationContext.getBean (), потому что он будет иметь такой же эффект. AFAIK весна не может сделать это динамически, но какие-либо другие указатели?

1 Ответ

0 голосов
/ 16 июня 2011

Насколько я понимаю, вы хотите создать новый компонент вместо ICustomListener readerListener = new MyCustomListener (queueConfig);В этом случае создание фабрики для mycustomlistener и использование

public abstract TestClient createTestClient();

для создания ваших bean-компонентов, а также определение

<bean id="testClient" class="com.myproject.testbeans.TestClient" scope="prototype">     
</bean>
<bean id="testClientFactory" class="com.myproject.testbeans.TestClientFactory">
    <lookup-method name="createTestClient" bean="testClient" />
</bean> 

в вашем контексте решит вашу проблему.Таким образом, каждый раз, когда вызывается метод фабрики createTestClient, новый бин создается и передается вашему коду.Однако вы должны передать объект конфигурации с помощью установщика, а не конструктора.

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