当前位置: 首页 > ai >正文

bean注入的过程中,Property of ‘java.util.ArrayList‘ type cannot be injected by ‘List‘

一、问题

在spring实践bean注入ArrayList属性的时候报错:

Property of ‘java.util.ArrayList’ type cannot be injected by ‘List’
在这里插入图片描述

二、原因分析

在尝试将 Spring 配置中的 注入到一个 ArrayList 类型的属性时出现了类型不匹配问题。核心问题在于:Spring 的 标签创建的是 java.util.LinkedList,而属性声明为 java.util.ArrayList。虽然两者都实现了 List 接口,但它们是不同的具体实现类。

<property name="al"><list>  <!-- Spring 默认创建的是 LinkedList --><value>test</value><value>9999</value></list>
</property>

在java类中:

private ArrayList al; // ArrayList 类型

三、解决方案

方案1:修改属性类型为 List 接口(推荐)
// 修改前
private ArrayList al;// 修改后(使用接口类型)
private List al; // 或 List<String> 如果有泛型,记得set方法传参类型也要改

优点:符合面向接口编程原则,兼容 Spring 的 标签(它返回 LinkedList)。

方案 2:在 Spring 配置中显式指定 ArrayList
<property name="al"><!-- 使用 value-type 指定元素类型 --><bean class="java.util.ArrayList"><constructor-arg><list value-type="java.lang.String"><value>fjd</value><value>9999</value></list></constructor-arg></bean>
</property>

方案 3:使用 util 命名空间(需要添加 schema)

在 XML 头部添加 util 命名空间:

xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util.xsd"

配置 ArrayList:

<util:list id="myList" value-type="java.lang.String" list-class="java.util.ArrayList"><value>test</value><value>9999</value>
</util:list><bean id="bookDao" class="com.fjd.dao.impl.BookDaoImpl"><property name="al" ref="myList"/>
</bean>

四、总结

  • 类型兼容性:

    • list标签 默认创建 LinkedList
    • 声明为 ArrayList 会导致类型不匹配
  • 最佳实践:

// 推荐:使用接口类型
private List<String> values;// 不推荐:使用具体实现类
private ArrayList<String> values; // 可能导致注入问题
  • 泛型考虑:

    • 如果列表中混合类型(如字符串和数字),确保属性声明为无泛型或 List<类型>
      否则可能引发类型转换异常
http://www.xdnf.cn/news/14816.html

相关文章:

  • 从“电话催维修“到“手机看进度“——售后服务系统开发如何重构客户体验
  • 历史数据分析——中证医药
  • 《数据维度的视觉重构:打造交互式高维数据可视化的黄金法则》
  • 如何解决Spring Boot中@Valid对List校验失效问题
  • Python小工具之PDF合并
  • Linux应用基础
  • [netty5: HttpObjectEncoder HttpObjectDecoder]-源码解析
  • 传输层 udptcp
  • 【力扣 简单 C】746. 使用最小花费爬楼梯
  • 国产 OFD 标准公文软件数科 OFD 阅读器:OFD/PDF 双格式支持,公务办公必备
  • LongT5: 针对长序列的高效文本到文本Transformer
  • Linux NFS终极指南:安装、配置与性能优化
  • 【解决“此扩展可能损坏”】Edge浏览器(chrome系列通杀))扩展损坏?一招保留数据快速修复
  • 【无标题】Go语言中的反射机制 — 元编程技巧与注意事项
  • 简单 Python 爬虫程序设计
  • Vue3-组件化-Vue核心思想之一
  • 物联网数据安全区块链服务
  • 遗传算法的原理与实现示例
  • Android开发前的准备工作
  • 批量PDF转换工具,一键转换Word Excel
  • 考研408《计算机组成原理》复习笔记,第三章(3)——多模块存储器
  • 10分钟搭建 PHP 开发环境教程
  • 基于 ETL 工具实现人大金仓数据库的数据迁移与整合实操指南
  • Go中使用Google Authenticator
  • OpenSSL 内存泄漏修复全景:119 个历史 Commit 的类型分析与防御启示
  • uniapp 微信小程序水印
  • bug记录::= 给全局变量赋值导致出现panic
  • Python大模型应用开发实践 - 初探
  • 金融系统中常用的FIX协议
  • 【三维重建】Flow Distillation Sampling:使用匹配先验的正则3DGS