You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring构造器注入出现歧义,先定义的int参数构造器未被调用原因排查

问题原因

你之前了解的「构造器存在歧义时优先调用先定义的构造器」规则有明确的生效前提:仅当多个候选构造器的参数类型匹配度完全一致时,Spring才会按构造器的定义顺序做选择,当前场景不满足该前提。

核心触发点是你在XML配置中没有给<constructor-arg>显式声明type属性:

  • 你传入的12、34是字符串格式的数值,Spring的默认类型转换逻辑可以同时支持将其转为int和double两种类型
  • Spring的构造器匹配算法中,会优先选择参数类型覆盖范围更广的构造器:double可以覆盖所有int的取值范围,反过来int无法覆盖所有double的取值范围,因此Spring判定double,double参数的构造器匹配度更高,最终调用了该构造器。

解决方案

要强制调用int,int参数的构造器,只需在构造参数声明中显式指定类型即可,修改后的XML配置如下:

<bean class="com.spring.Addition" name="addition1">
    <constructor-arg type="int" value="12"/>
    <constructor-arg type="int" value="34"/>
</bean>

如果存在同类型多参数顺序匹配的问题,还可以额外加上index属性指定参数的索引位置:

<bean class="com.spring.Addition" name="addition1">
    <constructor-arg index="0" type="int" value="12"/>
    <constructor-arg index="1" type="int" value="34"/>
</bean>

内容的提问来源于stack exchange,提问作者Dawson Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:36:05