Java c-名称空间和类型转换

Java c-名称空间和类型转换,java,spring,Java,Spring,我有一个带有4个整数参数的构造函数的类。它是在spring xml中配置的,如下所示: <bean id="mySearchService" class="app.service.MySearchService" c:maxConnectionsPerHost="${maxConnectionsPerHost}" c:maxTotalConnections="${maxTotalConnections}" c:connectionTimeout="${connect

我有一个带有4个整数参数的构造函数的类。它是在spring xml中配置的,如下所示:

<bean id="mySearchService" class="app.service.MySearchService"
    c:maxConnectionsPerHost="${maxConnectionsPerHost}"
    c:maxTotalConnections="${maxTotalConnections}"
    c:connectionTimeout="${connectionTimeout}"
    c:soTimeout="${soTimeout}" />
但我得到了以下错误:

创建名为“mySearchService”的bean时出错,该bean在类路径资源[applicationContext.xml]中定义:通过索引1为[java.lang.Integer]类型的构造函数参数表示未满足的依赖关系:构造函数参数类型不明确-是否将正确的bean引用指定为构造函数参数

如果我使用
的话,这是可行的,所以我想知道c名称空间是否没有像构造函数arg那样进行类型转换。

提到:

p命名空间不如标准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}" />

使用连字符的属性名而不是驼峰大小写。

提到:

p命名空间不如标准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}" />


使用连字符的属性名而不是驼峰大小写。

我很确定这就是原因:


所有参数都是同一类型的,并且参数名可能在运行时不可用(没有调试信息)。我可以提供索引或使用
@constructorproperty
注释使名称可见。

我很确定这就是原因:


所有参数都是同一类型的,并且参数名可能在运行时不可用(没有调试信息)。我可以提供索引或使用
@ConstructorProperties
注释使名称可见。

当值是bean引用而不是值时,p名称空间使用带-ref的驼峰大小写名称。所以我认为名字中的破折号没有意义。我使用的驼峰大小写名称与构造或名称完全匹配。@Kevin:如果是这样,那么
-ref
如何与以
ref
结尾的属性冲突(如我引用的第一个代码段所述)?我想说的是,如果构造函数参数被命名为,例如
maxConnectionsPerHost
,那么我认为属性需要被命名为,例如
c:max connections per host
。(这很奇怪,我知道,但是文档中的陈述没有真正意义。)我不知道如何回答这个问题,只是说我一直在使用p-namespace。其行为是名称与setters名称完全匹配(例如camel case),但值通过附加后缀“-ref”与引用区分开来。当值是bean引用而不是值时,p名称空间使用camel case名称和-ref。所以我认为名字中的破折号没有意义。我使用的驼峰大小写名称与构造或名称完全匹配。@Kevin:如果是这样,那么
-ref
如何与以
ref
结尾的属性冲突(如我引用的第一个代码段所述)?我想说的是,如果构造函数参数被命名为,例如
maxConnectionsPerHost
,那么我认为属性需要被命名为,例如
c:max connections per host
。(这很奇怪,我知道,但是文档中的陈述没有真正意义。)我不知道如何回答这个问题,只是说我一直在使用p-namespace。其行为是名称与setters名称完全匹配(例如驼峰大小写),但值通过附加后缀“-ref”与引用区分开来。