IOC Bean管理 - 自动装配 AutoWire
之前的学习一直都是使用property或者ref外部标签注入对象属性。
事实上可以使用AutoWire来实现。
实现
一个测试类:
Dept类
package com.xjy.spring.autowire;
public class Dept {
private String deptName;
public void setDeptName(String deptName) {
this.deptName = deptName;
}
@Override
public String toString() {
return "Dept{" +
"deptName='" + deptName + '\'' +
'}';
}
}
Employee类
package com.xjy.spring.autowire;
public class Employee {
private Dept dept;
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Employee{" +
"dept=" + dept +
'}';
}
}
Employee中包含一个部门类成员dept
通过普通方式注入
<bean id="Employee" class="com.xjy.spring.autowire.Employee">
<property name="dept" ref="Dept"></property>
</bean>
<bean id="Dept" class="com.xjy.spring.autowire.Dept">
<property name="deptName" value="Develop"></property>
</bean>
自动注入
使用autowire属性
autowire有两个常用值:
- byName:根据名称查找,根据成员变量名称查找相同id的bean并注入
- byType:根据类型查找,根据成员变量的数据类型在xml中查找相同类型的bean并注入
byName
<bean id="Employee" class="com.xjy.spring.autowire.Employee" autowire="byName">
</bean>
<bean id="dept" class="com.xjy.spring.autowire.Dept">
<property name="deptName" value="Develop"></property>
</bean>
byType
<bean id="Employee" class="com.xjy.spring.autowire.Employee" autowire="byType"></bean>
<bean id="dept" class="com.xjy.spring.autowire.Dept">
<property name="deptName" value="Develop"></property>
</bean>
相较于byName,byType只能用于XML中没有相同类型Bean的自动注入
例如:如果XML中存在两个Dept的Bean对象dept1和dept2。那么byType就不知道该选哪一个