Spring注入之自动注入

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容器就会报错!

猜你喜欢

转载自blog.csdn.net/qq_39428182/article/details/105755425
今日推荐