【发布时间】:2014-09-17 17:10:34
【问题描述】:
我想问一下Spring Constructor Injection。 所以在课堂上,我有两个参数数量不同的构造函数。
public class MyClassHello() {
public MyClassHello(String A) {
// do sth
}
public MyClassHello(String A, int B){
// do sth
}
}
如果我尝试像这样注入来访问第一个构造函数,Spring 将无法工作,因为存在歧义。
<bean id="injectQuestion" class="MyClassHello">
<constructor-arg index="0" value="A String"/>
</bean>
调试代码是这样的:
Unsatisfied dependency expressed through constructor argument with index 1 of type [java.lang.String]: Ambiguous constructor argument types.
我认为这意味着,Spring 需要知道索引 1 参数是否存在?
这与我们有两个具有相同数量参数的构造函数的通常情况不同。像这样,我可以设置类型以便在注入时进行区分。
在我的情况下,是否有强制 Spring 选择第一个构造函数?
非常感谢!!
【问题讨论】:
-
虽然我觉得您当前的设置会导致任何歧义这很奇怪,但在您的构造函数定义中添加一个
type属性以清除任何剩余的歧义。然后你应该有<constructor-arg index ="0" type="java.lang.String" value="A String"/> -
@kolossus 这无济于事,我已经尝试过了,但结果仍然相同。对于这两个构造函数,第一个参数是一个字符串。我认为的问题是注入如何知道第二个参数是否存在。
标签: java spring code-injection constructor-injection spring-bean