zoukankan      html  css  js  c++  java
  • Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]

    您的“关注”和“点赞”,是信任,是认可,是支持,是动力......

    如意见相佐,可留言。
    本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

    1 Spring 基于自动装配的依赖注入概述

    其他依赖注入的方式请参见博文《Spring 依赖注入(DI)详解 》

    Spring 为我们提供了一个自动装配的机制。操作概述如下所示:

    • 在类中提供依赖对象的setter方法,依赖项为setter方法参数。constructor模式不需要,因为依赖项是构造器参数。
    • 在 Spring 的配置文件中定义 Bean 时,<bean> 标签有一个autowire属性,autowire属性值有 6 种,接下来会逐一进行介绍。可以通过这个属性来让 Spring 容器为接受管理的 Bean 自动注入依赖对象。
      例如:<bean id="标识名" class="全限定类名" autowire="autowire属性值"/>

    如以上操作,就可以完成自动装配,就不用在配置文件中使用<property>标签或<constructor-arg>标签来描述 Bean 之间的依赖关系了。Spring 容器会自动建立 Bean 之间的依赖关系。

    有效的解决了配置文件可能会出现“臃肿”的问题,使代码整洁、美观。

    autowire属性值有如下 6 种(也可叫做 6 种自动装配模式):

    • no:默认的设置,表示不启用自动装配。需要显式装配 Bean。
    • byName:按名称自动装配。可以这么来理解,Spring 容器在管理一个类时,在配置文件中添加 Bean 的 autowire属性,并把属性值设置为byName;在 Java 代码中对应的有一个类,类中得有 setXxx(依赖项参数)方法。Spring 容器会尝试将它的属性(指的是依赖项参数)与配置文件中其他定义为相同名称(id值 或 name值)的 Bean 进行匹配,如果找到匹配项,Spring 容器会将这些 Bean 实例注入到拥有autowire=byName属性的 Bean 中。如果没匹配成功,将抛出异常,依赖项参数为null
    • byType:按类型自动装配。可以这么来理解,Spring 容器在管理一个类时,在配置文件中添加 Bean 的 autowire属性,并把属性值设置为byType;在 Java 代码中对应的有一个类,类中得有 setXxx(依赖项参数)方法。Spring 容器会尝试将它的属性(指的是依赖项参数)类型与配置文件中其他定义为相同类型(class值)的 Bean 进行匹配,如果找到不止一个匹配项,将抛出异常;如果没有找到匹配项,依赖项参数为null
    • constructor:与 byType 模式相似,不同之处在与它应用于构造器参数(依赖项),如果在容器中没有找到与构造器参数类型一致的 Bean,那么将抛出异常。(其实就是根据构造器参数的数据类型,进行 byType 模式的自动装配。)
    • autodetect:通过 Bean 类的自省机制(introspection)来决定是使用 constructor模式还是 byType模式进行自动装配。Spring 首先尝试通过 constructor 的模式自动装配,如果它不执行;Spring 再尝试通过 byType 的模式来自动装配。
    • default:设置上级标签<beans>default-autowire属性定义装配模式。

    2 自动装配的局限性

    • 不是所有类型都可以使用自动装配,不能自动装配的数据类型有:Object、基本数据类型(Date、CharSequence、Number、URI、URL、Class、String)等等。
    • 自动装配不如显示装配精确,如果可能的话尽量使用显式装配。

    3 案例实操,走你

    主要演示byNamebyTypeconstructor三种模式,因为学会了这三种,其他的模式也都能搞定了。

    3.1 案例:byName 模式

    第一步:创建Teacher类。内容如下图所示:

    在这里插入图片描述
    第二步:创建Staff类。内容如下图所示:

    在这里插入图片描述
    第三步:创建配置文件。内容如下所示:

    在这里插入图片描述
    第四步:创建测试类和 JUnit 运行测试。内容如下图所示:

    在这里插入图片描述

    3.2 案例:byType 模式

    第一步:创建Teacher类。内容如下图所示:

    在这里插入图片描述
    第二步:创建Staff类。内容如下图所示:

    在这里插入图片描述
    第三步:创建配置文件。内容如下所示:

    在这里插入图片描述
    第四步:创建测试类和 JUnit 运行测试。内容如下图所示:

    在这里插入图片描述

    3.3 案例:constructor 模式

    第一步:创建Teacher类。内容如下图所示:

    在这里插入图片描述
    第二步:创建Staff类。内容如下图所示:

    在这里插入图片描述
    第三步:创建配置文件。内容如下所示:

    在这里插入图片描述
    第四步:创建测试类和 JUnit 运行测试。内容如下图所示:

    在这里插入图片描述

    【文章其他地址】

    微信公众号:码农阿杰

    CSDN 博客

    【参考资料】

    spring

    Artifact Repository Browser

    Apache Commons

  • 相关阅读:
    Java Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/manongajie/p/12925755.html
Copyright © 2011-2022 走看看