春天-从集合或地图创建bean

时间:2019-06-18 14:14:56

标签: java spring spring-bean

前一段时间,我读到有关在Spring中创建bean的知识,在为集合和地图创建bean时有一个例外。 我的意思是创建一个用于收集或映射的bean,需要创建一个包装类,例如将一个列表作为此类的字段

public class CollectionBean {

  private List<String> someList;

}

,然后可以将其用于依赖项注入。 我想知道为什么没有包装类就不能注入它?

1 个答案:

答案 0 :(得分:5)

您绝对可以创建作为集合的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");
    }
}

可能引起混乱的是Java在编译时会丢弃类型的通用部分。因此,Spring无法在运行时查看对象,也不知道它是List<String>还是List<Integer> -对Java和Spring来说,在运行时只是List

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

解决此问题的一种方法是像您所做的那样创建包装器类。另一种方法是使用其他多种方法来消除自动装配的歧义-例如按名称。