Dependency injection(依赖注入)
DI exists in two major variants, Constructor-based dependency injection and Setter-based dependency injection.
案例分析:
1、创建EmployeeBean类 代码如下:
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 + "]";
}
}
2、创建Dept类 代码如下:
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 + "]";
}
}
3、创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
<!-- 一、构造函数依赖注入(Constructor-based dependency injection) -->
<!-- 1、通过构造函数注入 (Constructor argument resolution)-->
<bean id="employeeBean1" class="www.csdn.spring.constructor.bean.EmployeeBean">
<constructor-arg value="王晓而" />
<constructor-arg value="100.0" />
<constructor-arg ref="dept" />
<constructor-arg value="男" />
</bean>
<!-- 2、根据构造器参数的类型(Constructor argument type matching) -->
<bean id="employeeBean2" class="www.csdn.spring.constructor.bean.EmployeeBean">
<constructor-arg type="java.lang.String" value="陈红均" />
<constructor-arg type="java.lang.String" value="男" />
<constructor-arg type="java.lang.Double" value="100.0" />
<constructor-arg type="www.csdn.spring.constructor.bean.Dept"
ref="dept" />
</bean>
<!-- 3、通过构造函数根据索引index注入(Constructor argument index) -->
<bean id="employeeBean3" class="www.csdn.spring.constructor.bean.EmployeeBean">
<constructor-arg index="0" value="陈红均" />
<constructor-arg index="1" value="100.0" />
<constructor-arg index="2" ref="dept" />
<constructor-arg index="3" value="女" />
</bean>
<!-- 4、通过构造函数根据name注入(Constructor argument name) -->
<bean id="employeeBean4" class="www.csdn.spring.constructor.bean.EmployeeBean">
<constructor-arg name="name" value="陈红均" />
<constructor-arg name="salary" value="100.0" />
<constructor-arg name="dept" ref="dept" />
<constructor-arg name="sex" value="男" />
</bean>
<!-- 二、Setter方法依赖注入(Setter-based dependency injection) -->
<bean id="dept" class="www.csdn.spring.constructor.bean.Dept">
<!-- 根据setter注入 -->
<property name="name" value="CSDN教育事业部" />
<property name="deptno" value="0x0001" />
</bean>
</beans>
4、创建测试代码:
@Test
public void testBean(){
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-null.xml");
MemberBean bean = context.getBean("memberBean1", MemberBean.class);
System.out.println(bean.name);
System.out.println(bean.member);
System.out.println(bean.email);
}
5、自己运行观看结果