品牌型号:联想ThinkPad X1
系统:Windows10家庭版
软件版本:Spring 5.3.7
可以说只要学过Spring框架,那么IOC控制反转和依赖注入肯定是绕不开的知识点,我们平时面试的时候,面试官也经常会拿这两个知识点来提相关问题。很多新手伙伴在入门的时候,总是会把这两个概念混为一谈,甚至可能会觉得这两个是同一个东西,只是叫法不同。然后平时跟着敲代码的时候,看不出差别,但是一旦深入理解底层原理或者是做面试回答的时候,就很容易出错。这两个概念书面意思确实比较抽象,官方文档解释起来也确实有点晦涩难懂,普通人很难看一次看懂,所以,为了让更多小伙伴能搞明白Spring如何实现控制反转,Spring依赖注入和控制反转区别,我将通过本文给各位做一次详细讲解,希望能帮助各位彻底搞懂Spring。
一、Spring如何实现控制反转
如果只看“控制反转”这个专业术语,我也看不懂,所以我就用很直白的话来给各位解释,大家回忆下,在没有Spring之前,我们是怎么创建对象的?没错,都是我们手动去new对象,主动权都是在我们开发者手里。

控制反转就是把对象的控制权交给了Spring容器,不再需要我们手动new对象了,而是容器来负责对象的创建、管理和销毁。Spring实现控制反转,我们需要告诉Spring要管理哪些类,所以我们需要去定义配置,可以用注解也可以用XML去配置。

要开启注解扫描,扫描项目中带有特定注解的类。扫描完成后,Spring无需手动new对象,会通过Java的反射机制去创建对象,默认情况下Spring会在项目启动的时候就完成对象创建,并把对象统一存放到Spring的IOC容器中。

我们需要用到某个对象的时候,不需要手动去创建对象了,直接通过注解注入就可以了,Spring会直接从容器中取出对应的对象,分配给程序去使用。

二、Spring依赖注入和控制反转区别
讲到控制反转的实现方式,那么很多人肯定要疑惑,既然两个可以经常一起出现,那么到底怎么区分控制反转和依赖注入呢?我就这么直接给各位解释吧,控制反转是一种设计思想,依赖注入是这种思想的一种具体实现。

控制反转的思想是移交控制权,把之前我们手动创建对象的权力交给了Spring容器,目的是为了降低代码之间的耦合度。

依赖注入属于具体实现操作,把我们在容器中创建的对象,赋值给需要的类,可以理解为,控制反转是让我们把创建和管理的权力交给了容器,而依赖注入是从容器中拿来用的动作,我们日常代码中写的@Autowired注解,就是在做依赖注入,不需要我们手动去赋值了。

以上就是Spring如何实现控制反转,Spring依赖注入和控制反转区别的全部内容了。Spring的控制反转,是将创建对象的权力交给Spring容器,Spring要实现控制反转靠的是容器、配置、反射、依赖注入四件套,说到依赖注入和控制反转,两个知识点关系密不可分并且分工明确,相对于控制反转将对象创建权力交给Spring去管理和创建,依赖注入负责的是传递对象、完成对象的赋值。