Spring多个构造方法导致注入类型歧义:
好了,现在Spring该知道我要调的是第一个构造方法了,顺利从千年老妖转变成美少女,耶!
UserBean有2个构造方法。
public class UserBean {
private String name;
private int age;
private String birthYear;
public UserBean(String name, int age, String birthYear) {
// do something
}
public UserBean(String name,String birthYear, int age) {
// do something
}
public String toString() {
return "username:" + name + ";age:" + age + ";birthYear:" + birthYear;
}
}
我想构造一个名为winne,年龄为23,出生年份为1994的用户;
<!--Spring-UserBean.xml-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="UserBean" class="com.winne.common.UserBean">
<constructor-arg>
<value>winne</value>
</constructor-arg>
<constructor-arg>
<value>23</value>
</constructor-arg>
<constructor-arg>
<value>1994</value>
</constructor-arg>
</bean>
</beans>
亲,1994也可以是个int呢~
有歧义了,程序不知道我要创建的是年龄为1994的千年老妖winne还是23岁的美少女winne。
我必须清楚地告诉Spring,否则它会认为我是个千年老妖,这在建国以后是不被允许的。
所以,应该这样做:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="UserBean" class="com.winne.common.UserBean">
<constructor-arg type="java.lang.String">
<value>winne</value>
</constructor-arg>
<constructor-arg type="int">
<value>23</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>1994</value>
</constructor-arg>
</bean>
</beans>
好了,现在Spring该知道我要调的是第一个构造方法了,顺利从千年老妖转变成美少女,耶!