Java Spring-从集合或映射创建bean
不久前,我读到了关于在Spring中创建bean的文章,在为集合和映射创建bean时出现了一个异常。 我的意思是要为集合或映射创建一个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
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时,基于类型的自动连接将不起作用
解决这个问题的一种方法是创建一个包装器类,正如您所做的那样。另一种方法是使用许多其他消除自动接线歧义的方法之一,例如通过名称。我创建的博客文章可能很有用-