NINCOMPOOP NINCOMPOOP - 4 months ago 16
Java Question

Spring overloaded constructor injection

This is the code :

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);
}

}


The Spring config-file is :

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


Is there any specific rule to determine which constructor will be called by Spring ?

Answer

Here, the first argument will be matched to the first parameter of each method and then the parameter will be matched.

I would suggest the solution below to help remove ambiguity

If you want to call your first constructor use

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

If you want to call your second constructor use

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

So that resolves the ambiguity

EDIT :-

Please read more about this problem here.

Comments