我有一个带有4个Integer args的构造函数的类。它在spring xml中配置如下:
<bean id="mySearchService" class="app.service.MySearchService"
c:maxConnectionsPerHost="${maxConnectionsPerHost}"
c:maxTotalConnections="${maxTotalConnections}"
c:connectionTimeout="${connectionTimeout}"
c:soTimeout="${soTimeout}" />
我的属性文件包含:
maxConnectionsPerHost=50
maxTotalConnections=50
connectionTimeout=500
soTimeout=100
但是我收到以下错误:
创建在类路径资源[applicationContext.xml]中定义名称为'mySearchService'的bean时出错:通过构造函数参数表达的不满意的依赖关系,索引1的类型为[java.lang.Integer]:不明确的构造函数参数类型 - 您是否指定了正确的bean引用作为构造函数参数?
如果我使用<constructor-arg value="..." />
,这是有效的,所以我想知道c命名空间是否不像构造函数arg那样输入转换。
答案 0 :(得分:0)
p-namespace不如标准XML格式灵活。例如,声明属性引用的格式与以
Ref
结尾的属性冲突,而标准XML格式则不然。
那:
c:
命名空间使用与p:
命名空间相同的约定(对于bean引用尾随-ref
),用于按名称设置构造函数参数。
据此,我推断 - 虽然文档似乎没有明确说明 - 你实际上需要写:
<bean id="mySearchService" class="app.service.MySearchService"
c:max-connections-per-host="${maxConnectionsPerHost}"
c:max-total-connections="${maxTotalConnections}"
c:connection-timeout="${connectionTimeout}"
c:so-timeout="${soTimeout}" />
使用带连字符的属性名而不是驼峰式。
答案 1 :(得分:0)
我很确定这就是原因:
所有参数都属于同一类型,并且参数名称可能在运行时不可用(无调试信息)。我可以提供索引或使用@ConstructorProperties
注释使名称可见。