报错:Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.Str

本文详细解析了在SSM项目中遇到的bean创建失败问题,具体表现为构造参数类型模糊,通过调整constructor-arg属性成功解决了问题。

今天在搭建一个SSM项目时遇到一个报错:Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.String]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?

检查发现是因为创建这个bean出错了,检查到后applicationContext-*。xml中后看到是如下配置的

查看org.springframework.beans.factory.BeanCreationException文档后发现,bean内如果定义了constructor-arg属性的话,是不需要name=“XXX”这个属性的,去掉即可。

 

PS:这个constructor-arg中可以定义index属性

在 `applicationContext.xml` 中创建 `redisClusterNodes` 和 `redis.clients.jedis.HostAndPort` Bean 时出现 `NumberFormatException` 问题,通常是由于在构造 `HostAndPort` 实例时,尝试将字符串类型的端口值转换为整数类型失败导致的。 #### 问题分析 在原配置中,使用 SpEL(Spring Expression Language)从属性文件中提取端口值时,可能由于属性文件中的端口值不是有效的整数格式,或者在解析过程中出现问题,导致无法将字符串转换为整数。 #### 解决方案 可以通过确保属性文件中的端口值是有效的整数,并且在配置中正确解析这些值来解决问题。以下是修改后的 `applicationContext.xml` 示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 加载配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:redis.properties</value> </list> </property> </bean> <!-- 配置 Jedis 连接池 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.pool.maxTotal}"/> <property name="maxIdle" value="${redis.pool.maxIdle}"/> <property name="minIdle" value="${redis.pool.minIdle}"/> <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/> </bean> <!-- 解析 Redis 集群节点 --> <bean id="redisClusterNodes" class="java.util.HashSet"> <constructor-arg> <list> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.cluster.nodes[0].host}"/> <constructor-arg index="1" value="${redis.cluster.nodes[0].port}" type="int"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.cluster.nodes[1].host}"/> <constructor-arg index="1" value="${redis.cluster.nodes[1].port}" type="int"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.cluster.nodes[2].host}"/> <constructor-arg index="1" value="${redis.cluster.nodes[2].port}" type="int"/> </bean> </list> </constructor-arg> </bean> <!-- 创建 JedisCluster 实例 --> <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg index="0" ref="redisClusterNodes"/> <constructor-arg index="1" ref="jedisPoolConfig"/> </bean> </beans> ``` #### 关键点解释 - **属性文件**:确保 `redis.properties` 文件中的端口值是有效的整数,例如: ```properties redis.cluster.nodes[0].host=127.0.0.1 redis.cluster.nodes[0].port=6379 redis.cluster.nodes[1].host=127.0.0.1 redis.cluster.nodes[1].port=6380 redis.cluster.nodes[2].host=127.0.0.1 redis.cluster.nodes[2].port=6381 ``` - **构造函数参数类型**:在配置 `HostAndPort` Bean 时,通过 `type="int"` 明确指定端口参数的类型为整数,帮助 Spring 正确解析参数。 ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值