在spring装配bean中还有一种Set注入的替代,那就是构造参数的注入。
set注入是一种直接方式,缺点是它假设了所 有的可变属性都可以通过set方法访问到。例如有些属性在创建时设置一次,以后不再改变。替代方式是通过构造函数设置一些属性值。还有它无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean。下面是构造器的几种注入方式:
1.通过构造函数注入 (原始方式)
2.根据构造器参数的类型
3.根据索引index注入
4.根据参数名称注入
EmployeeBean.java
[java]
package www.csdn.spring.constructor.bean;
public class EmployeeBean {
private String name;
private Double salary;
private Dept dept;
private String sex;
// 构造器函数
public EmployeeBean(String name, Double salary, Dept dept, String sex) {
super();
this.name = name;
this.salary = salary;
this.dept = dept;
this.sex = sex;
}
@Override
public String toString() {
return "EmployeeBean [name=" + name + ", salary=" + salary + ", dept="
+ dept + ", sex=" + sex + "]";
}
}
package www.csdn.spring.constructor.bean;
public class EmployeeBean {
private String name;
private Double salary;
private Dept dept;
private String sex;
// 构造器函数
public EmployeeBean(String name, Double salary, Dept dept, String sex) {
super();
this.name = name;
this.salary = salary;
this.dept = dept;
this.sex = sex;
}
@Override
public String toString() {
return "EmployeeBean [name=" + name + ", salary=" + salary + ", dept="
+ dept + ", sex=" + sex + "]";
}
}
Dept.java
[java]
package www.csdn.spring.constructor.bean;
public class Dept {
private String name;
private String deptno;
public void setName(String name) {
this.name = name;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
@Override
public String toString() {
return "Dept [name=" + name + ", deptno=" + deptno + "]";
}
}
package www.csdn.spring.constructor.bean;
public class Dept {
private String name;
private String deptno;
public void setName(String name) {
this.name = name;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
@Override
public String toString() {
return "Dept [name=" + name + ", deptno=" + deptno + "]";
}
}
spring-constructor.java
[html]
< xml version="1.0" encoding="UTF-8" >
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
< xml version="1.0" encoding="UTF-8" >
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">