我遵循Spring Reference Documentation 4.0.0.RELEASE。它说
当使用简单类型时,Spring不能 确定值的类型,因此无法在没有帮助的情况下按类型匹配
方案如下
package examples;
public class ExampleBean {
private int years;
private String ultimateAnswer;
public ExampleBean(int years, String ultimateAnswer) {
this.years = years;
this.ultimateAnswer = ultimateAnswer;
}
}
现在要解决这些参数,系统会指示在 XML
中使用类型属性<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>
但是当我忽略这条指令时,即使没有在XML配置中使用类型属性或索引号或参数名称,Spring容器很容易解析参数。请指导我为什么必须不必要地使用类型属性。
答案 0 :(得分:2)
当您忽略该指令并省略类型属性和索引号时,Spring会使用自己的规则来决定如何解释这些值。如果你没有Spring很容易混淆的多个构造函数,这就足够了。
如果你的构造函数具有相同数量的不同类型的参数,那么类型属性将阐明你打算调用哪个构造函数。但是,Spring不使用构造函数参数在XML中出现的顺序来确定要使用的构造函数,因此如果您有多个构造函数,例如
public ExampleBean(int years, String ultimateAnswer) {
...
}
public ExampleBean(String stuff, int someNumber) {
...
}
然后,如果将其配置为
,则Spring不会区分它们<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="1"/>
<constructor-arg type="java.lang.String" value="foo"/>
</bean>
然后Spring正在寻找以任何顺序接受字符串和int的东西,它可以将构造函数作为匹配;这取决于它首先发现的。索引号可以防止这种情况发生,它向Spring指示参数应该出现的顺序。
当你的bean有多个构造函数时,明确描述构造函数参数似乎比希望Spring猜对了更好。