文章目录
自动装配
一.自动装配概念
1.手动装配
以value或ref的方式明确指定属性值
<bean id="teacher3" class="com.school.Teacher">
<property name="tid" value="20150003"></property>
<property name="tname" value="Zhu Hanqin"></property>
<property name="students">
<list>
<ref bean="student2" />
<ref bean="student3" />
<ref bean="student4" />
</list>
</property>
</bean>
2.自动装配
根据指定的装配规则,不需要明确指定,Spring自动将匹配的属性值注入bean中。
i.根据类型(byType)
将类型匹配的bean作为属性注入到另一个bean中,若IOC容器中有多个与目标bean一致的bean,Spring将无法判定哪个bean最适合该属性,所以不能执行自动装配;
Student.java类
public class Student {
private Integer sid;
private String sname;
private Integer age;
private Double grade;
private Teacher teacher;
//...省略
}
xml配置文件:根据类型直接为对象属性赋值(对象属性对应的bean类型唯一)
<!-- 自动装配 -->
<bean id="s5" class="com.atguigu.spring.di.Student" autowire="byType">
<property name="sid" value="05052"></property>
<property name="sname" value="陈晨"></property>
<property name="age" value="22"></property>
<property name="grade" value="95"></property>
<!-- 根据类型自动装配teacher对象属性:此时teacher类的bean必须唯一 -->
<!-- <property name="teacher" value=""></property> -->
</bean>
<bean id="teacher" class="com.atguigu.spring.di.Teacher">
<property name="tid" value="05060"></property>
<property name="tname" value="顾惜朝"></property>
</bean>
获取该对象并输出结果
Student s5=ac.getBean("s5",Student.class);
System.out.println(s5);
ii.根据名称(byName)
Emp.java类
public class Emp {
private Integer eid;
private String ename;
private CarExtends car;
private DeptI dept;
}
xml配置文件:必须将目标bean的名称和属性名设置成完全相同
<bean id="emp" class="com.atguigu.ioc.auto.Emp" autowire="byName">
<property name="eid" value="1001"></property>
<property name="ename" value="张三"></property>
<!-- <property name="car" ref="car"></property>
<property name="dept" ref="dept"></property> -->
</bean>
<bean id="car" class="com.atguigu.ioc.auto.Car">
<property name="cid" value="666666">
</property>
<property name="cname" value="车子">
</property>
</bean>
<bean id="dept" class="com.atguigu.ioc.auto.Dept">
<property name="did" value="666666">
</property>
<property name="dname" value="部门">
</property>
</bean>
运行结果