4

这是代码:

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 将调用哪个构造函数?

4

3 回答 3

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>

这样就解决了歧义

编辑 :-

请在此处阅读有关此问题的更多信息。

于 2012-12-13T17:11:52.070 回答
0

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

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

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

于 2012-12-13T17:10:08.497 回答
0

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

Bitbucket 代码为了测试,运行 Main 类,它将输出 String FIRST 或 SECOND,这取决于将使用哪个构造函数来创建 Triangle 对象。

于 2012-12-13T23:04:45.840 回答