当前位置: 首页 > 知识库问答 >
问题:

Spring-从集合或映射创建bean

谢奇略
2023-03-14

前段时间我读到关于在Spring中创建bean的文章,在为集合和映射创建bean时有一个例外。我的意思是为集合或映射创建bean,需要创建一个包装类,例如一个列表作为这个类的字段

public class CollectionBean {

  private List<String> someList;

}

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

共有1个答案

微生阳平
2023-03-14

您绝对可以创建属于集合的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无法在运行时查看对象并知道它是否是<code>List

这意味着当有多个< code>List类型的bean时,基于类型的自动连接将不起作用。

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

 类似资料:
  • 你可以定义一个新的名或从下拉式菜单中选择导入到现有的表或集合。 【注意】如果你在“目标表”或“目标集合”输入一个新的名,在“是新的”内的框将会自动显示为“是”。 导入多个表或集合时,所有表或集合会显示在列表中。

  • 我有一个与@OneToMany有关系的学生班级,比如下面的班级 和类实体: 我使用MapStruct将dto转换为实体,并将实体转换为dto: 学生地图绘制员。JAVA 类映射器。JAVA 这些映射器扩展了简单的EntityMapper接口 生成StudentMapperImpl。班 当我试图将学生DTO转换为学生DTO类中填充了class Id的学生实体时,一切都很好。当学生DTO中的class

  • 假设我有以下映射目标。 如何从其他属性的Iterable映射到其他属性? 我可以这样做吗?

  • 主要内容:集合类型,以下是纠正/补充内容:集合(Collection)是一个将多个对象分组为一个单元的java框架。它用于存储,检索和操作汇总数据。 在JPA中,可以使用集合来持久化包装类和String的对象。JPA允许三种对象存储在映射集合中 - 基本类型,实体和嵌入式类型。 集合类型 根据要求,我们可以使用不同类型的集合来持久化对象。如下所示 - List Set Map 包中包含集合框架的所有类和接口。 以下是纠正/补充内容: 根据

  • 主要内容:集合映射实例,程序输出结果集合(Set)是一个包含唯一元素的接口。 这些元素不保留任何顺序。当需要以无序方式检索唯一元素时,可以使用。 完整的项目目录结构如下所示 - 集合映射实例 在这个例子中,我们将一个对象嵌入到一个实体类中,并将其定义为一个集合类型 - 。 这个例子包含以下步骤 - 第1步: 在包下创建一个实体类,这个类包含员工, 和嵌入对象(员工地址)。注解 表示嵌入对象。 文件:Employee.java 的代码

  • 这个步骤,在默认情况下,只有源和目标之间含有相同名的表或集合会在列表中映射。如果你不想同步某些表或集合,只需从下拉式列表手动禁用它们。 相同名的键和字段也会映射。你可以在“键映射”和“字段映射”列中更改映射。