我正在尝试使用特定大小的对象列表进行自动装配,但是尽管搜索了所有与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)}
答案 0 :(得分:0)
如果您对@Autowired
使用java.util.List
,则会注入与List的Generic类型匹配的所有Java Bean的列表。
所以,显然,你需要在你的上下文中使用更多类型为MyListener
的bean(现在它只有一个)。