Spring重载构造函数注入

NIN*_*OOP 5 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);
}

}
Run Code Online (Sandbox Code Playgroud)

Spring配置文件是:

 <bean id="triangle" class="org.tester.Triangle">
    <constructor-arg value="20" />
    <constructor-arg value="10" />
</bean>
Run Code Online (Sandbox Code Playgroud)

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

Bha*_*ani 5

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

\n\n

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

\n\n

如果你想调用你的第一个构造函数,请使用

\n\n
<bean id="triangle" class="org.tester.Triangle">\n<constructor-arg type="int" \xc2\xa0value="20" />\n<constructor-arg type="java.lang.String" \xc2\xa0value="10" />\n</bean>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
<bean id="triangle" class="org.tester.Triangle">\n    <constructor-arg type="java.lang.String"value="20" />\n    <constructor-arg   type="int"  value="10" />\n</bean>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样就解决了歧义

\n\n

编辑 :-

\n\n

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

\n


Bri*_*new 0

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

<bean id="triangle" class="org.tester.Triangle">
    <constructor-arg type="int" value="20" />
    <constructor-arg value="10" />
</bean>
Run Code Online (Sandbox Code Playgroud)

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