Spring重载构造函数注入

时间:2012-12-13 17:02:03

标签: java spring constructor-injection

这是代码:

public class Triangle {


private String color;
private int height;


public Triangle(String color,int height){
    this.color = color;
    this.height = height;
}

public Triangle(int height ,String color){
    this.color = color;
    this.height = height;
}

public void draw() {
    System.out.println("Triangle is drawn , +
            "color:"+color+" ,height:"+height);
}

}

Spring配置文件是:

 <bean id="triangle" class="org.tester.Triangle">
    <constructor-arg value="20" />
    <constructor-arg value="10" />
</bean>

是否有任何具体规则来确定Spring将调用哪个构造函数?

3 个答案:

答案 0 :(得分:3)

这里,第一个参数将与每个方法的第一个参数匹配,然后匹配参数。

我建议使用下面的解决方案来帮助消除歧义

如果要调用第一个构造函数,请使用

<bean id="triangle" class="org.tester.Triangle">
<constructor-arg type="int"  value="20" />
<constructor-arg type="java.lang.String"  value="10" />
</bean>

如果要调用第二个构造函数,请使用

<bean id="triangle" class="org.tester.Triangle">
    <constructor-arg type="java.lang.String"value="20" />
    <constructor-arg   type="int"  value="10" />
</bean>

这样就解决了歧义

编辑: -

请详细了解此问题here

答案 1 :(得分:0)

我不相信。请注意,您可以键入参数,例如:

<bean id="triangle" class="org.tester.Triangle">
    <constructor-arg type="int" value="20" />
    <constructor-arg value="10" />
</bean>

这将消除这种情况下的混乱。

答案 2 :(得分:0)

基于Spring 3.1.0的测试,将使用第二个构造函数。我不知道为什么,文档没有给出任何确定的答案。

Bitbucket code要测试,运行Main类,它将输出String FIRST或SECOND,具体取决于将使用哪个构造函数创建Triangle对象。