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

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.dtcms.com/a/267268.html

相关文章:

  • 虚拟机网络编译器还原默认设置后VMnet8和VMnet1消失了
  • 第三方软件测试费用受啥影响?规模和测试类型了解下?
  • Python 训练营打卡 Day 53-对抗生成网络
  • Linux关机指令详解:shutdown命令的使用指南
  • Linux:多线程---深入互斥浅谈同步
  • 动手实践OpenHands系列学习笔记5:代理系统架构概述
  • java中,stream的filter和list的removeIf筛选速度比较
  • 力扣网编程55题:跳跃游戏之逆向思维
  • 虚拟机与容器技术详解:VM、LXC、LXD与Docker
  • 【内存】Linux 内核优化实战 - net.ipv4.tcp_max_tw_buckets
  • [创业之路-474]:企业经营层 - 小米与华为多维对比分析(2025年视角),以后不要把这两家公司放在同一个维度上 进行比较了
  • Springboot应用WebSocket服务测试
  • 软著难不难,申请
  • cocos 打包安卓
  • 《Redis》哨兵模式
  • 安达发|APS自动排产软件与服装行业的深度融合:智能制造时代的效率革命
  • 图灵完备之路(数电学习三分钟)----解码器
  • PI 控制器与 PR 控制器的等效转换与应用详解
  • 【深度学习】神经网络剪枝方法的分类
  • 【openp2p】 学习2:源码阅读P2PNetwork和P2PTunnel
  • 深入解读 Java CompletableFuture:设计原理与源码分析
  • [Cyclone] docs | 主程序逻辑 | 地址解码器 | P2PKH地址
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • TailWind CSS Intellisense 插件在VSCode 上不生效
  • 蓝桥杯51单片机设计
  • 在VMware虚拟机中安装Windows 98时,Explorer提示“该程序执行了非法操作,即将关闭”的解决办法
  • PADS交互式布局
  • SwiftUI 7(iOS 26)中玻璃化工具栏的艺术
  • Qt开发:QListWidget的介绍和使用
  • Java面试宝典:BIO、NIO、AIO原理演进与实际应用深度实践