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

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

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

文章目录

  • 1 Spring 基于自动装配的依赖注入概述
  • 2 自动装配的局限性
  • 3 案例实操,走你
    • 3.1 案例:byName 模式
    • 3.2 案例:byType 模式
    • 3.3 案例:constructor 模式
  • 【友情链接】
    • 微信公众号:码农阿杰
    • 博客园
  • 【参考资料】
    • spring
    • [Artifact Repository Browser](https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-milestone)
    • [Apache Commons](http://commons.apache.org/)

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

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

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

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

如以上操作,就可以完成自动装配,就不用在配置文件中使用标签或标签来描述 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:设置上级标签default-autowire属性定义装配模式。

2 自动装配的局限性

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

3 案例实操,走你

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

3.1 案例:byName 模式

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

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第1张图片
第二步:创建Staff类。内容如下图所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第2张图片
第三步:创建配置文件。内容如下所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第3张图片
第四步:创建测试类和 JUnit 运行测试。内容如下图所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第4张图片

3.2 案例:byType 模式

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

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第5张图片
第二步:创建Staff类。内容如下图所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第6张图片
第三步:创建配置文件。内容如下所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第7张图片
第四步:创建测试类和 JUnit 运行测试。内容如下图所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第8张图片

3.3 案例:constructor 模式

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

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第9张图片
第二步:创建Staff类。内容如下图所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第10张图片
第三步:创建配置文件。内容如下所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第11张图片
第四步:创建测试类和 JUnit 运行测试。内容如下图所示:

Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]_第12张图片

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

spring

Artifact Repository Browser

Apache Commons

你可能感兴趣的:(【SSM】,#,Spring,spring,java)