品牌型号:联想ThinkPad X1
系统:Windows10家庭版
软件版本:Spring 5.3.7
我们在学做Spring项目时,几乎都会碰到依赖注入和控制反转这两个概念,很多新手朋友习惯把它们当成同一个意思来看待,但面试时被细问起来,这两个概念是不是完全等价,还真说不清楚。另外控制反转这套思想说起来确实有点抽象,很多小伙伴不知道在代码里该怎么实现,接下来,我就来给大家讲一讲Spring依赖注入和控制反转的区别是什么,Spring控制反转该如何实现的相关内容。
一、Spring依赖注入和控制反转区别是什么
依赖注入和控制反转这两个思想在我们实际开发中关系确实很紧密,所以导致很多小伙伴将它们搞混。控制反转是一种思路上的转变,在我们传统写法里,一个类要用到其他对象,需要我们手动去new对象,这种主动权在自己手里,我们可以决定什么时候创建、创建哪个实现。

控制反转把这个主动权给反转过来了,对象不再由我们自己来掌控,而是把创建和管理对象的权力交给了Spring容器。

既然控制反转让我们把主动权交给了容器,那容器具体怎么把准备好的依赖给到目标对象,就需要一套具体的操作方式了,这就是依赖注入要解决的问题。我们可以通过构造方法、setter方法,或者直接给字段赋值来注入依赖。

可以说没有控制反转,依赖注入也就没有存在的意义,因为压根不需要外部来注入,自己创建就完事了,同样的,控制反转如果没有依赖注入去实现,也只能停留在概念层面,落不了地。
二、Spring控制反转如何实现
控制反转的思想在Spring中主要是靠IOC容器实现的,我们开发者得先告诉容器有哪些Bean需要被管理,配置的方式有好几种,可以靠XML文件把每个Bean的类型、属性、依赖关系写清楚,不过这种方式太繁琐了。

后来企业里逐渐流行用@Component、@Service、@Repository这些注解加在类上,告诉容器这是一个需要管理的对象,现在又有了基于Java类的配置方式,用@Configuration加@Bean方法来定义。不管哪种方式,目的都是让容器知道该管哪些对象,接下来就是扫描和加载的一个过程,容器启动的时候,会根据配置去扫描指定的包路径或者读取配置文件。

把声明过的Bean信息收集起来,形成一个定义清单后,开始进行实例化和组装,容器会按需把对象真正创建出来。创建的过程中,如果发现某个Bean依赖了别的Bean,容器会去找到或者创建那个被依赖的对象,再通过依赖注入的方式,把它注入到当前对象里。对象创建好之后,容器还会负责后续的初始化、销毁等环节,整个对象从生到死都不需要我们去手动管理。

以上就是Spring依赖注入和控制反转区别是什么,Spring控制反转如何实现的全部内容了。控制反转和依赖注入的关系其实没那么复杂,控制反转提出的是思想,依赖注入是具体的实现方式,在Spring容器内部,控制反转靠的是配置、扫描、实例化、组装这一整套流程串联起来,不是某个单独的注解或者步骤就能概括的。