【问题标题】:Spring - creating bean from collection or mapSpring - 从集合或映射创建 bean
【发布时间】:2019-06-18 14:14:56
【问题描述】:

前段时间我读到了关于在 Spring 中创建 bean 的内容,并且在为集合和映射创建 bean 时出现了异常。 我的意思是为集合或映射创建一个bean,需要创建一个包装类,例如一个列表作为此类的字段

public class CollectionBean {

  private List<String> someList;

}

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

【问题讨论】:

标签: java spring spring-bean


【解决方案1】:

您绝对可以创建属于集合的 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&lt;String&gt; 还是 List&lt;Integer&gt; —— 对于 Java 和 Spring,在运行时它只是一个 List

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

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

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2021-11-30
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多