============
构造注入重载
============
与Set方法不同,构造方法可能存在多个不同的重载版本。
方法名一样,参数表(参数的个数、类型和顺序)不同,谓之重载。
Spring在构造注入的过程中,会选择哪个版本的构造方法呢?
1 构造参数个数不同
/src/main/java/cn/tedu/injection/Customer.java:
public class Customer implements Serializable {
private String name;
private int age;
public Customer(String name, int age) { \_
this.name = name; \_
this.age = age; \ 构造方法重载
} _/ 参数个数不同
_/
public Customer(String name) { /
this.name = name;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
根据constructor-arg标签的个数选择对应的构造方法。
/src/main/resources/applicationContext.xml:
张飞
25
赵云
2 构造参数类型不同
/src/main/java/cn/tedu/injection/Customer.java:
public class Customer implements Serializable {
private String name;
private int age;
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
public Customer(String name) { \_
this.name = name; \
} > 构造方法重载
_/ 参数类型不同
public Customer(int age) { /
this.age = age;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
通过constructor-arg标签的type属性显式注明类型,据此选择对应的构造方法。
/src/main/resources/applicationContext.xml:
张飞
25
赵云
30 ^
-- 显式注明类型,避免注入到name里
构造参数的个数和类型都相同的情况是不可能出现的,因为那根本就不是合法的重载关系,属于Java语法错误。