首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用应用程序上下文注册bean集合并使其符合自动装配的条件?

如何使用应用程序上下文注册bean集合并使其符合自动装配的条件?
EN

Stack Overflow用户
提问于 2016-02-23 17:31:32
回答 3查看 1.3K关注 0票数 0

我想在@Configuration注释的AppConfig中创建Spring的动态列表:

代码语言:javascript
复制
@Bean
List<SomeObject> createSomeObjects(@Value("${object.count}") final int objectCount) {

    List<Object> objects = new ArrayList<>();
    for (int i = 1; i <= objectCount; i++) {
        objects.add(new SomeObject())
    }
    return objects;
}

然后,我想将这个对象列表插入到另一个bean中,如下所示:

代码语言:javascript
复制
@Autowired
List<SomeObject> objects;

我得到的是以下例外:

代码语言:javascript
复制
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: java.util.List ..

我可以为我的对象列表创建某种容器,但我正在寻找一个更优雅的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-24 22:00:32

Spring专门处理集合,但这不起作用;容器总是将集合解释为单独声明的bean组。经过一些讨论和修改后,它将在4.3中工作。,但就目前而言,最好的解决方案是使用holder类。

票数 1
EN

Stack Overflow用户

发布于 2016-02-23 20:52:02

从Spring 4开始,泛型在自动装配过程中得到了充分的支持。。所以,只需更新Spring版本就可以了。

如果无法更新,只需使用bean名称自动更新:

代码语言:javascript
复制
@Bean(name = "someObjectsList")
List<SomeObject> createSomeObjects(@Value("${object.count}") final int objectCount) {

    List<Object> objects = new ArrayList<>();
    for (int i = 1; i <= objectCount; i++) {
        objects.add(new SomeObject())
    }
    return objects;
}

@Autowired
@Qualifier("someObjectsList")
List<SomeObject> objects;
票数 0
EN

Stack Overflow用户

发布于 2016-02-24 21:55:11

您的解决方案应该没有问题,但是创建bean的方法似乎不是公共的,所以它在配置类之外是不可见的。请参阅第3章. Bean的可见性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35584289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档