Java Spring-从集合或映射创建bean

Java Spring-从集合或映射创建bean,java,spring,spring-bean,Java,Spring,Spring Bean,不久前,我读到了关于在Spring中创建bean的文章,在为集合和映射创建bean时出现了一个异常。 我的意思是要为集合或映射创建一个bean,需要创建一个包装器类,例如一个列表作为这个类的字段 public class CollectionBean { private List<String> someList; } 公共类CollectionBean{ 私人名单; } 然后它可以用于依赖注入。 我想知道为什么在没有包装类的情况下不能进行注入?您完全可以创建属于集合的b

不久前,我读到了关于在Spring中创建bean的文章,在为集合和映射创建bean时出现了一个异常。 我的意思是要为集合或映射创建一个bean,需要创建一个包装器类,例如一个列表作为这个类的字段

public class CollectionBean {

  private List<String> someList;

}
公共类CollectionBean{
私人名单;
}
然后它可以用于依赖注入。
我想知道为什么在没有包装类的情况下不能进行注入?

您完全可以创建属于集合的bean:

public class CollectionsBean {

    @Autowired
    private List<String> nameList;

    public void printNameList() {
        System.out.println(nameList);
    }
}

@Configuration
public class CollectionConfig {

    @Bean
    public CollectionsBean getCollectionsBean() {
        return new CollectionsBean();
    }

    @Bean
    public List<String> nameList() {
        return Arrays.asList("John", "Adam", "Harry");
    }
}
公共类集合bean{
@自动连线
私人名单;
public void printNameList(){
System.out.println(名称列表);
}
}
@配置
公共类集合配置{
@豆子
public CollectionsBean getCollectionsBean(){
返回新的CollectionsBean();
}
@豆子
公共列表名称列表(){
返回数组。asList(“John”、“Adam”、“Harry”);
}
}
可能引起混淆的是Java在编译时删除了类型的泛型部分。因此Spring无法在运行时查看对象并知道它是
列表还是
列表,对于Java和Spring来说,在运行时,它只是一个
列表

这意味着当存在多个类型为
List
的bean时,基于类型的自动连接将不起作用


解决这个问题的一种方法是创建一个包装器类,正如您所做的那样。另一种方法是使用许多其他消除自动接线歧义的方法之一,例如通过名称。

我创建的博客文章可能很有用-