动态依赖注入弹簧

时间:2011-06-15 17:01:41

标签: spring dynamic dependency-injection

我的班级内有以下代码

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 spring不能动态地执行此操作,而是任何其他指针?

1 个答案:

答案 0 :(得分:0)

据我所知,你想创建一个新的bean而不是    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方法时,都会创建一个新bean并将其提供给您的代码。但是,您必须通过setter而不是构造函数来提供配置对象。