题目
什么是 IoC、依赖注入
答案
**IoC(Inverse of Control,控制反转)**在其他语言中也有应用,并非 Spring 特有,它是一种**设计思想**,基本概念就是**将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。IoC 具体的实现方式是【依赖注入】** 简单的说我们本来在代码中创建一个对象是通过 `new` 关键字,而使用了 `Spring` 之后,我们不在需要自己去 `new` 一个对象了,而是直接通过容器里面去取出来,再将其自动注入到我们需要的对象之中,也就说创建对象的控制权不在我们程序员手上了,全部交由 `Spring` 进行管理,需要什么对象就从容器中去拿就好了。 **交给 Spring 管理的对象也称为 `Bean`,所有的 Bean 都被存储在 IoC 容器(`BeanFactory`)中,更具体来说,是存在一个 Map 集合中(`DefaultListableBeanFactory.beanDefinitionMap`)**。 ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/image-20230601105705333.png) 将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 **IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的**。 ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/image-20230601111127453.png) 比如说,在实际项目中一个 Service 类可能有几百甚至上千个类作为它的底层,假如我们需要实例化这个 Service,你可能每次都要搞清这个 Service 所有底层类的构造函数,这显然过于繁琐。如果利用 IoC 的话,你只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。