如何自动装配特定大小的集合

时间:2018-05-28 05:47:41

标签: java spring autowired

我正在尝试使用特定大小的对象列表进行自动装配,但是尽管搜索了所有与stackoverflow相关的问题,我仍然无法看到之前讨论过的任何内容。我很惊讶这是不需要的吗?

在下面的示例中,我看到myListeners的大小始终为1.如何使myListener列表具有10个MyListener实例

@Component
@Scope("prototype")
public class ListenerThreadPool {
private static final Logger LOGGER = LoggerFactory.getLogger(ObjectPool.class);

private  ExecutorService threadPool;
private  int poolSize;

@VisibleForTesting
final AtomicBoolean isStarted = new AtomicBoolean(false);


@Autowired
public void setMyObject(List<MyListener> myListeners) {
    this.myListeners = myListeners;
}

@Autowired
@VisibleForTesting
List<MyListener> myListeners;


public void setPoolSize(int poolSize) {
    this.poolSize=poolSize;
    this.threadPool = Executors.newFixedThreadPool(poolSize);
}

public void start() {
    if (isStarted.compareAndSet(false, true)) {

        for (int i = 0; i < myListeners.size(); ++i) {
            LOGGER.info("Starting listeners pool " + myListeners.get(i).toString());
            threadPool.submit(myListeners.get(i));
        }
    } else {
        LOGGER.warn("Cannot start listeners pool because it's already started");
    }
}

}

我尝试了类似下面的内容但是我收到了错误     @豆     public List listMyListeners(@Value(&#34; $ {workflow.threads:10}&#34;)int threads){         return new ArrayList(10);     }
    @Autowired     @Qualifier(&#34; listMyListeners&#34)     列出myListener;

引起:org.springframework.beans.factory.BeanCreationException:无法自动装配字段:java.util.List com.groupon.mailman.messaging.MyListenerPool.myListener;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到[com.groupon.mailman.messaging.MyListener]类型的限定bean,用于依赖[com.groupon.mailman.messaging.MyListener的集合]:预期至少为1 bean有资格作为此依赖项的autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = listMyListeners)}

引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到[com.groupon.mailman.messaging.MyListener]类型的限定bean,用于依赖[com.groupon.mailman.messaging.MyListener的集合]:expected至少有一个bean可以作为此依赖项的autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = listMyListeners)}

1 个答案:

答案 0 :(得分:0)

如果您对@Autowired使用java.util.List,则会注入与List的Generic类型匹配的所有Java Bean的列表。

所以,显然,你需要在你的上下文中使用更多类型为MyListener的bean(现在它只有一个)。