0

我想问一下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 需要知道 index 1 参数是否存在?

这与我们有两个具有相同数量参数的构造函数的通常情况不同。像这样,我可以设置类型以便在注入时进行区分。

就我而言,是否有强制 Spring 选择第一个构造函数?

非常感谢!!

4

1 回答 1

0

您可以使用以下名称:

<bean id= "InjectQuestion" class = "MyClassHello">
    <constructor-arg name = "A" value="A String"/>
</bean>

<bean id= "InjectQuestion" class = "MyClassHello">
    <constructor-arg name = "A" value="A String"/>
    <constructor-arg name = "B" value="42"/>
</bean>

请注意,您在声明类时的语法无效;并且在定义 bean 时,class="..."您应该使用类的完全限定名称(例如packageName.subPackage.MyClassHellonot just MyClassHello

于 2014-09-17T18:40:21.743 回答