Java 如何自动关联特定大小的集合

Java 如何自动关联特定大小的集合,java,spring,autowired,Java,Spring,Autowired,我正在尝试自动关联一个特定大小的对象列表,但在搜索所有与stackoverflow相关的问题时,我看不到以前讨论过的任何类似的问题。我很惊讶,根本不需要这样做 在下面的示例中,我看到myListeners的大小始终为1。如何使MyListener列表包含10个MyListener实例 @Component @Scope("prototype") public class ListenerThreadPool { private static final Logger LOGGER = Logge

我正在尝试自动关联一个特定大小的对象列表,但在搜索所有与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");
    }
}
@组件
@范围(“原型”)
公共类ListenerThreadPool{
私有静态最终记录器Logger=LoggerFactory.getLogger(ObjectPool.class);
私人服务线程池;
私有int池大小;
@可视性测试
最终原子布尔isStarted=新原子布尔(false);
@自动连线
public void setMyObject(列出myListeners){
this.myListeners=myListeners;
}
@自动连线
@可视性测试
列出我的听众;
public void setPoolSize(int poolSize){
this.poolSize=poolSize;
this.threadPool=Executors.newFixedThreadPool(池大小);
}
公开作废开始(){
如果(isStarted.compareAndSet(false,true)){
对于(int i=0;i
}

我尝试了下面这样的方法,但我发现了错误 @豆子 公共列表listMyListeners(@Value(${workflow.threads:10}”)int-threads){ 返回新的ArrayList(10); }
@自动连线 @限定符(“listMyListeners”) 列出myListener

原因:org.springframework.beans.factory.BeanCreationException:无法自动连线字段:java.util.List com.groupon.mailman.messaging.MyListenerPool.myListener;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到符合依赖项[collection of com.groupon.mailman.messaging.MyListener]类型[com.groupon.mailman]的符合条件的bean]:应至少有1个符合此依赖项autowire候选项条件的bean。依赖项批注:{@org.springframework.beans.factory.annotation.Autowired(required=true),@org.springframework.beans.factory.annotation.Qualifier(value=listMyListeners)}


原因:org.springframework.beans.factory.NoSuchBean定义异常:未找到依赖项[collection of com.groupon.mailman.messaging.MyListener]类型为[com.groupon.mailman.messaging.MyListener]的符合条件的bean]:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true),@org.springframework.beans.factory.annotation.Qualifier(value=listMyListeners)}

如果对
java.util.List
使用
@Autowired
,它将插入与该列表的泛型类型匹配的所有java bean的列表


因此,显然,在您的上下文中需要更多类型为
MyListener
的bean(现在只有一个)。

我不明白这一点。我想要的只是myListeners列表中相同MyListener的多个实例。我该怎么做?在注释配置类->方法创建列表中,创建类型为
java.util.List
的bean,创建10个您想要的对象实例->返回列表->带限定符的autowire.Artem…我尝试了您提出的问题,并更新了问题中的详细信息。我犯了一个我不明白的错误。你觉得有什么问题吗?