IOC

IOC,控制反转,是Spring的核心组件,用以保存管理Spring的所有bean对象,总而言之就是一个容器。
它负责创建、配置和管理bean,控制bean的依赖注入。通俗点讲就是我们不需要管对象的创建以及对象之间依赖注入这些,只需要直接使用就可以了。
ApplicationContext继承BeanFactory(getBean()核心方法),BeanFactory可以简单粗暴的理解为一个Map,不过是CHM。
什么是依赖注入?就是把程序运行期间所依赖的资源从外部注入到内部,维护程序内外对象的关系。

如何简单实现一个IOC?
首先需要一个容器,这里我们可以选择ConcurrentHashMap作为容器维护beanName和Bean对象之间的关系

另外需要提供一个入口,其实根据不同的加载方式可以提供多个入口,例如使用注解管理Bean对象或者使用配置文件管理Bean对象,从而提供不同的具体实现。

其次需要生成Bean对象,那么此时需要一个BeanFactory进行。

然后我们需要一个扫描器或者叫做读取器,可以对指定路径下的配置文件进行扫描或者对使用了某些注解的类进行解析,然后将生成的Bean对象注册进容器中。

DI(依赖注入)

依赖注入(DI)是一个过程,通过该过程,对象只能通过构造函数参数,工厂方法的参数或在构造或创建对象实例后在对象实例上设置的属性来定义其依赖关系(即,与它们一起工作的其他对象)。从工厂方法返回。

然后,容器在创建 bean 时注入那些依赖项。从根本上讲,此过程是通过使用类的直接构造或服务定位器模式来自己控制其依赖关系的实例化或位置的 Bean 本身的逆过程(因此称为 Control Inversion)。

使用 DI 原理,代码更简洁,当为对象提供依赖项时,去耦会更有效。该对象不查找其依赖项,也不知道依赖项的位置或类。结果,您的类变得更易于测试,尤其是当依赖项依赖于接口或抽象 Base Class 时,它们允许在单元测试中使用存根或模拟实现。

-----------以上解释来源Spring官方文档

简而言之依赖注入就是把Bean添加到IOC容器的方式。

依赖注入方式

Autowiring Mode
Spring 容器可以自动装配协作 bean 之间的关系。通过检查 ApplicationContext 的内容,您可以让 Spring 自动为您的 bean 解析协作者(其他 bean)

依赖注入类型