品牌型号:联想ThinkPad X1
系统:Windows10家庭版
软件版本:Spring 5.3.7
Spring框架核心的特性之一就是它改变了对象创建和管理方式。我们在没有Spring之前,一个类里要调用到另一个类,通常得自己在这个类里new出另一个类的对象,这样类与类之间的耦合度很高,改动一处往往牵连一片。Spring引入IOC后,对象的创建和管理都交给了容器去做,我们只要告诉它需要什么,容器就会把对应的对象准备过来,这就是依赖注入的基本思路。下面给大家介绍一下Spring常用的注入方式有哪些,Spring依赖注入和自动装配的关系的相关内容。
一、Spring常用的注入方式有哪些
Spring里我们常用的注入方式无非就三种,构造器注入、setter注入还有字段注入。每一种注入方式都有各自的写法和使用场景,构造器注入是把依赖通过构造方法传进去。我们在写的时候,在类的构造方法中声明需要的参数,Spring在创建这个Bean的时候,会自动把对应的依赖对象传进来,这种注入方式能保证依赖在对象创建那一刻就完成初始化动作。现在不少企业也更推荐这种方式,如果配合final字段用,既能保证不可变,又方便写单元测试。

setter注入则是通过set方法来完成赋值,只需要在类里给依赖字段提供一个对应的setter方法,Spring在实例化对象之后,会调用这个方法把依赖传进去,这种方式比较灵活,但是正因为是对象创建完之后才赋值,如果忘了调用setter,就容易出现空指针。

而字段注入是直接在类的成员变量上加注解,Spring会通过反射直接把值塞进字段里,这种写法代码量少,看着省事,在平时小demo或者小项目里比较常见。但是这种注入方式依赖关系不明显,仅看类定义看不出这个类到底依赖了什么,因为绕开了构造器和setter,我们在做单元测试的时候不方便手动注入mock对象,所以正式项目里不太建议大量使用。

二、Spring依赖注入和自动装配的关系
虽然依赖注入和自动装配经常被放在一起讲,但这两个概念并不是一回事。依赖注入说的是一种设计思路,让对象不主动去创建自己依赖的其他对象,由外部Spring容器把这些依赖准备好再注入进来。依赖注入是一种解耦的手段,让类与类之间的关系不再那么死板。

自动装配是为了让容器知道该注入哪个对象,如果没有自动装配,那么我们每个依赖都得在配置文件或者代码里手动指定告诉容器具体注入哪个Bean,这样写起来很重复了。如果项目大了,配置量会很夸张。
自动装配就是让容器自己去找合适的Bean,根据类型匹配也好,按名称匹配也好,容器会根据规则自动把符合条件的对象找出来完成注入,不用我们去一个个手动绑定关系。

依赖注入是目的,可以理解为是整个机制要达成的一个效果,自动装配是手段,让依赖注入这件事变得更省心,如果没有自动装配,依赖注入虽然也能做,但是配置起来很繁琐。自动装配如果脱离了依赖注入也没有存在的意义,毕竟它的存在本身就是为了简化注入过程的。

以上就是Spring常用的注入方式有哪些,Spring依赖注入和自动装配的关系的全部内容了。梳理下来,构造器、setter、字段这三种注入方式各自使用的场景不太一样,我们在实际项目里用得多的还是构造器注入,自动装配本质上是给依赖注入打配合的,省去了手动绑定Bean的繁琐步骤。平时我们写代码如果遇到注入相关的问题,可以检查下是注入方式选得不合适,还是自动装配的匹配规则没搞清楚,把这些概念理顺了,后面看更复杂的Spring源码或者排查Bean注入失败之类的问题,会顺手不少。