这是代码:
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将调用哪个构造函数?
答案 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对象。