==============================
Spring IoC依赖注入之构造器注入
==============================
所谓构造器注入就是利用被Spring管理的对象的构造器完成对其属性的赋值。
1 简单类型、字符串和类类型的属性注入
为Student类添加两个构造器:
- 无参构造器,兼容Set方法注入
- 针对所有非集合类型属性的构造器
public class Student {
...
public Student() {
}
public Student(String number, String name, String gender, int age,
Date enrollment, Subject subject) {
this.number = number;
this.name = name;
this.gender = gender;
this.age = age;
this.enrollment = enrollment;
this.subject = subject;
}
...
}
配置对象:
- 类类型属性注入,或通过ref引用有名对象,或通过bean子标签定义匿名对象
- 书写顺序必须和构造器参数表的顺序严格一致,或通过index指定参数的位置
测试:
public class SpringTest {
public static void main(String[] args) {
...
// 构造器注入
Student sd = context.getBean("sd", Student.class);
System.out.println(sd);
...
}
}
例程:SpringIoC
2 集合类型的属性注入
为Student类再增加一个构造器,针对包括集合类型属性在内的所有属性。
public class Student {
...
public Student(String number, String name, String gender, int age,
Date enrollment, Subject subject,
List hobbies,
List courses,
Map planA,
Map planB,
Map planC,
Properties planD) {
this.number = number;
this.name = name;
this.gender = gender;
this.age = age;
this.enrollment = enrollment;
this.subject = subject;
this.hobbies = hobbies;
this.courses = courses;
this.planA = planA;
this.planB = planB;
this.planC = planC;
this.planD = planD;
}
...
}
配置对象:
旅游
电影
足球
Java语言
Java Web
SSM
针对集合类型属性的构造器注入,在形式上与Set方法注入类似。
测试:
public class SpringTest {
public static void main(String[] args) {
...
// 构造器注入
Student se = context.getBean("se", Student.class);
System.out.println(se);
...
}
}
例程:SpringIoC