IoC 自动装载

IoC 自动装载(Autowire)

后期在开发过程中经常会用到。

什么是 IoC 自动转载?

自动装载 是完成 bean 之间的依赖注入,即 DI 方式。

为什么要用自动装载?

IoC 负责创建对象;

DI 负责完成对象的依赖注入,通过配置 property 标签的 ref 属性来完成,同时 Spring 提供了另外一种更加简便依赖注入方式自动装载 ,不需要手动配置 property,IoC 容器会自动选择 bean 完成 DI 注入。

过去为完成 DI 注入,需要在 property 标签中配置 ref 属性值

<!-- 通过有参构造来创建bean的映射对象 -->
<bean id="student2" class="com.thesunandsnow.entity.Student">
        <constructor-arg name="id" value="3"></constructor-arg>
        <constructor-arg name="name" value="Jay"></constructor-arg>
        <constructor-arg name="age" value="40"></constructor-arg>
        <constructor-arg name="address" ref="address"></constructor-arg>
        
</bean>


<bean id="address" class="com.thesunandsnow.entity.Address">
        <property name="id" value="1"></property>
        <property name="name" value="解放路"></property>\
</bean>

自动装载有两种方式:

  • byName :通过属性名自动装载
  • byType :通过属性的数据类型自动装载

byName 的自动装载步骤

byName 顾名思义,就是通过 bean 标签的 id 属性来完成 DI 注入。

byName 自动装载方式会根据对象的实例域的名字,自动的在 xml 中寻找与名称相同的 bean id 属性。若找到,则完成自动装载。

  1. 查看实体类:

    这个实体类需要注入 Car 对象

    package com.thesunandsnow.entity;
    
    import lombok.Data;
    
    @Data
    public class Person {
        private long id;
        private String name;
        private Car car;
    }
    
  2. 先在 xml 中配置一个 Car 对象的 bean 标签

    bean 标签的 id 属性不是随便取的,必须为 car,因为即将注入这个对象的 Person 对象的 实例域 中 Car 类的名称就是 car,byName 方式要求 bean 的 id 必须与 实例域名称相同。

    <bean id="car" class="com.thesunandsnow.entity.Car" p:id="1" p:name="宝马"></bean>
    
  3. 在想注入 car 的 bean 标签中添加 autowire属性,属性值即自动装载方式:byNane

    即可完成自动装载。

    <bean id="person" class="com.thesunandsnow.entity.Person" autowire="byName">
        <property name="id" value="11"></property>
        <property name="name" value="张三"></property>
    </bean>byType 即根据数据
    

byType 的自动装载步骤

byType 即根据数据类型去寻找。

与 byName 方式不同,byType 只在 xml 中寻找与 实例域 数据类型一样的 bean 标签来完成自动装载步骤。

<bean id="cars" class="com.thesunandsnow.entity.Car" p:id="1" p:name="宝马"></bean>

<bean id="person" class="com.thesunandsnow.entity.Person" autowire="byType">
    <property name="id" value="11"></property>
    <property name="name" value="张三"></property>
</bean>

注意:这种方式当然不允许一个 xml 文件中有两个及以上的相同的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值