============ 构造注入重载 ============ 与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语法错误。