前一段时间,我读到有关在 Spring 中创建 bean 的内容,并且为集合和映射创建 bean 时有一个异常(exception)。 我的意思是为集合或映射创建一个 bean,需要创建一个包装类,例如将列表作为此类的字段
public class CollectionBean {
private List<String> someList;
}
然后就可以在依赖注入(inject)中使用了。 我想知道为什么没有包装类就不能注入(inject)?
最佳答案
你绝对可以创建作为集合的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 时,基于类型的 Autowiring 将不起作用。 .
解决这个问题的一种方法是创建一个包装类,就像您所做的那样。另一种方法是使用许多其他方法来消除 Autowiring 的歧义——例如通过名称。
关于java - Spring - 从集合或映射创建 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56651179/