基于引用类型的自动注入
引用类型的自动注入(只对引用类型有效):由框架实现对引用类型的赋值,常用的赋值规则 :
1 ) byName (按名称自动注入) : java类中引用类型的属性名 和 spring容器(spring配置文件)中 bean的id 一样,且数据类型一样,这样的bean能够赋值给引用类型。
2)byType (按类型自动注入) : java类中引用类型的数据类型 和 spring容器(spring配置文件)中 bean 的class属性值是 同源关系 的,这样的bean能够赋值给引用类型。
注:同源关系是指:
- 引用类型的数据类型和< bean >的class属性值是一样的。
- 引用类型的数据类型和< bean >的class属性值是父子类关系的。
- 引用类型的数据类型和< bean >的class属性值是接口和实现类关系
指定byName自动注入
< bean id=“xx” class=“yyy” autowire=“byName” />
public class Student {
private String name;
private int age;
//引用类型 对应这个mySchool 就会找id为mySchool的bean来完成对引用类型的属性注入
private School mySchool;
//setter toString
}
public class School {
private String name;
private String address;
//setter toString
}
<bean id="myStudent" class="com.test.Student" autowire="byName">
<!-- 简单类型的属性赋值 -->
<property name="name" value="王五" />
<property name="age" value="21" />
<!-- 引用类型设值注入 -->
<!-- <property name="mySchool" ref="myXueXiao" /> -->
</bean>
<bean id="mySchool" class="com.test.School">
<property name="name" value="中山大学" />
<property name="address" value="广州" />
</bean>
指定byType自动注入
< bean id=“xx” class=“yyy” autowire=“byType” />
注:byType中符合条件的对象只能有一个,多余一个是报错的
public class Student {
private String name;
private int age;
//引用类型
private School mySchool;
//setter toString
}
public class School {
private String name;
private String address;
//setter toString
}
<!-- 指定了byType就会找bean中class属性是引用类型class同源的来完成属性注入 -->
<bean id="myStudent" class="com.test.Student" autowire="byType" >
<!-- 简单类型的属性赋值 -->
<property name="name" value="王五" />
<property name="age" value="20" />
<!-- 引用类型设值注入 -->
<!-- <property name="mySchool" ref="myXueXiao" /> -->
</bean>
<!-- 同源关系一 -->
<!-- 只能有一个School类对象 -->
<bean id="myXueXiao" class="com.test.School">
<property name="name" value="中山大学" />
<property name="address" value="广州" />
</bean>
结束语
追踪着鹿的猎人是看不见山的