引用类型的自动注入:spring框架根据某些规则可以给引用类型赋值,不用在给引用类型赋值
使用规则常用的是byName,byType
1.byName(按名称注入):java类中引用类型的属性名和spring容器中(配置文件)<bean>的id名称一样,
且数据类型是一致的,这样的容器中的bean,spring能够赋值给引用类型。
语法:
<bean id="xx" class="yyy" autowire = "byName">
简单类型属性赋值
</bean>
<!--byName-->
<bean id="myStudent" class="com.example.ba04.Student" autowire="byName">
<property name="name" value="李四"/><!--setName("李四")-->
<property name="age" value="22"/><!--setAge(20)-->
<!--引用类型-->
<!--<property name="school" ref="mySchool"/>-->
</bean>
<!--声明School对象-->
<bean id="school" class="com.example.ba04.School"> <!--id名称与对象属性名相同-->
<property name="name" value="黑皮大学"/>
<property name="address" value="广州市"/>
</bean>
2.byType(按类型注入):java类中引用类型的数据类型和spring容器中(配置文件)<bean>的class属性
是同源关系的,这样的bean能够赋值给引用类型
同源就是一类的意思:
1.java类中引用类型的数据类型和bean的class的值是一样的。
2.java类中引用类型的数据结构和bean的class的值父子类关系的。
3.java类中引用类型的数据结构和bean的class的值接口和实现类关系的。
语法:
<bean id="xx" class="yyy" autowire = "byType">
简单类型属性赋值
</bean>
1.java类中引用类型的数据类型和bean的class的值是一样的。
<bean id="myStudent" class="com.example.ba05.Student" autowire="byType">
<property name="name" value="张三"/><!--setName("李四")-->
<property name="age" value="21"/><!--setAge(20)-->
<!--引用类型-->
<!--<property name="school" ref="mySchool"/>-->
</bean>
<!--声明School对象-->
<bean id="mySchool" class="com.example.ba05.School">
<property name="name" value="白皮大学"/>
<property name="address" value="广州市"/>
</bean>
2.java类中引用类型的数据结构和bean的class的值父子类关系的。
<bean id="myStudent" class="com.example.ba05.Student" autowire="byType">
<property name="name" value="张三"/><!--setName("李四")-->
<property name="age" value="21"/><!--setAge(20)-->
<!--引用类型-->
<!--<property name="school" ref="mySchool"/>-->
</bean>
<!--声明School的子类-->
<bean id="primaryschool" class="com.example.ba05.PrimarySchool">
<property name="name" value="北京小学"/>
<property name="address" value="北京的大兴区"/>
</bean>
注意:在byType中,在xml配置文件中声明bean只能有一个符合条件的,
多余一个是错误的