Spring注入的自动注入方法
本文主要讲解一下Spring注入的自动注入
自动注入分为 byname 和 byType的自动注入方法
自动注入是对于引用类型的属性的注入方法,之前我们使用的 属性中的 ref 标签进引用类型的显式注入,现在我们设置autowire 属性,为引用类型进行隐式注入。
1.byname的方式
还是以Student类和School类为例
byname的方法,主要是将应用类型的属性名和spring容器中bean的id设置成一样的,且数据类型是一样的,即可给属性赋值。
Xml的配置文件
<bean id="student" class="com.yuyi.test.Student" autowire="byName">
<property name="age" value="18"/>
<property name="name" value="tom"/>
<!-- <constructor-arg index="2" ref="school"/>-->
</bean>
<bean id="school" class="com.yuyi.test.School">
<constructor-arg name="address" value="北京" />
<constructor-arg name="name" value="清华大学" />
</bean>
Student类的代码
public class Student {
private String name ;
private int age;
private School school;
上图代码中,autowire设置成byname,school类的id与与Student的school属性名一致。
测试一下,结果如下
此处隐式注入成功!
2.bytype的注入方法
按类型注入,Java类中引用类型的数据类型和spring中xml的bean中的class属性是同源关系,啥是同源关系?
1.1.Java类中的引用类型的数据类型和bean中的class属性是一样的。
2.Java类中的引用类型的数据类型和bean中的class是父子继承关心。
3.Java类中的引用类型的数据类型和bean中的class是接口与实现关系。
<bean id="student" class="com.yuyi.test.Student" autowire="byType">
<property name="age" value="18"/>
<property name="name" value="tom"/>
<!-- <constructor-arg index="2" ref="school"/>-->
</bean>
<bean id="school" class="com.yuyi.test.School">
<constructor-arg name="address" value="北京" />
<constructor-arg name="name" value="清华大学" />
</bean>
实际上就是把autowire属性给改成byType
结果是一摸一样的哈。
不过这里注意的是,这种类型的注入,因为上面三点的原因,可能会有多个合适的bean类,此时,我们应该修改,使符合设置的类只有一个,不然spring容器就会报错!