Java c-名称空间和类型转换
我有一个带有4个整数参数的构造函数的类。它是在spring xml中配置的,如下所示: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
<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”与引用区分开来。