构造函数arg重载的spring注入问题

时间:2014-09-17 17:10:35

标签: java spring code-injection constructor-injection spring-bean

我想问一下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选择第一个构造函数吗?

非常感谢!!

1 个答案:

答案 0 :(得分: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.MyClassHello而不仅仅是MyClassHello