You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅通过注解将同类型Bean合并为集合/数组并注入?

当然可以!纯注解就能搞定,完全不需要ApplicationContext的额外方法

Spring本身就内置了这种同类型Bean的集合注入能力,你写的代码其实已经是正确的实现方式了——当你在@Bean方法(或者@Component类的构造器/Setter方法)中声明Collection<MyBean>(或者List<MyBean>、Set<MyBean>)作为依赖参数时,Spring会自动扫描容器中所有类型为MyBean的Bean,把它们全部收集起来注入到这个集合里。

完整代码示例

先看基础的MyBean类:

public class MyBean {
    private int id;

    public MyBean(int id) {
        this.id = id;
    }

    // 可选:添加getter和toString方便调试
    public int getId() {
        return id;
    }

    @Override
    public String toString() {
        return "MyBean{" + "id=" + id + '}';
    }
}

然后是配置类,包含多个MyBean的定义和最终的MyFinalBean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Collection;

@Configuration
public class BeanConfig {

    @Bean
    public MyBean myBean1() {
        return new MyBean(1);
    }

    @Bean
    public MyBean myBean2() {
        return new MyBean(2);
    }

    @Bean
    public MyBean myBean3() {
        return new MyBean(3);
    }

    // 直接注入Collection<MyBean>,Spring自动收集所有MyBean实例
    @Bean
    public MyFinalBean myFinalBean(Collection<MyBean> myBeans) {
        return new MyFinalBean(myBeans);
    }
}

最后是接收集合的MyFinalBean:

import java.util.Collection;

public class MyFinalBean {
    private Collection<MyBean> myBeans;

    public MyFinalBean(Collection<MyBean> myBeans) {
        this.myBeans = myBeans;
    }

    // 测试用方法,验证集合内容
    public void printAllBeans() {
        myBeans.forEach(System.out::println);
    }
}

额外实用细节

  1. 集合顺序控制:如果需要指定Bean在集合中的顺序,可以给每个@Bean方法添加@Order(n)注解,Spring会按照n值从小到大排列集合元素(未加@Order的Bean默认优先级最低,会排在最后)。
  2. Map注入替代:如果需要同时获取Bean的名称和实例,可以用Map<String, MyBean>作为注入参数——此时Map的key是Bean的名称(即@Bean方法的名字,比如myBean1),value是对应的Bean实例。
  3. @Primary不影响集合:即使某个MyBean被标记了@Primary,集合依然会包含所有同类型Bean,@Primary仅在你直接注入单个MyBean实例时生效。

内容的提问来源于stack exchange,提问作者Oleksandr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:58:30