控制反转(IOC)/依赖注入(DI)

David 2022-06-28 15:32:01
Categories: Tags:
  • 控制反转(IoC)也被称为依赖注入(DI),是从两个角度描述的同一个概念。

 

  • 依赖注入(DI)是一个对象定义其依赖关系的过程。对象仅通过构造函数参数、工厂方法的参数或在对象实例被构造或从工厂方法返回后设置的属性来定义与一起工作的其他对象的依赖关系。从工厂方法返回。然后容器在创建 bean 时注入这些依赖项。从根本上讲,此过程是通过使用类的直接构造或服务定位器模式来自己控制其依赖关系的实例化或位置的 Bean 本身的逆过程 (因此称为 Control Inversion)

 

概念

解释

依赖

指通过局部变量、方法参数、返回值等建立的对于其他对象的调用关系。ClassA类使用了ClassB中的属性或者方法,ClassA不能抛开ClassB独立存在,叫做ClassA依赖ClassB

 

  • 类与类之间的依赖关系增加了程序开发的复杂程度,在开发一个类的时候,还要考虑对使用了该类的其他类的影响

 

  • 这个过程基本上是相反的,因此被称为控制反转(IoC),即 bean 本身通过直接构造类或使用 Service Locator 模式等机制来控制其依赖项的实例化或位置。

 

  • 控制反转(IoC)指导开发人员如何使用对象,管理对象。 把对象的创建,属性赋值,对象的声明周期都交给代码之外的容器管理。

概念

解释

控制

对象创建,属性赋值, 对象声明周期管理

反转

把开发人员管理对象的权限转移给了代码之外的容器实现。 由容器完成对象的管理。

正转

开发人员在代码中, 使用 new 构造方法创建对象。 开发人员掌握了对象的创建,属性赋值,对象从开始到销毁的全部过程。 开发人员对对象全部控制。这种导致了对象之间的相互调用的耦合性增加,不利于后期项目的升级和维护。

 

  • Spring 底层使用的 反射机制, 通过反射创建对象,给属性赋值。

 

  • 给属性赋值可以使用
    1. xml配置文件中的标签和属性
    2. 使用注解

 

  • DI 注入分类:
    1. set注入(设值注入)
    2. 构造注入

 

  • 通过容器,可以使用容器中的对象(容器已经创建了对象, 对象属性已赋值, 对象也组装完成),使用时只需要提供对应的对象名称

 

 

来自 <https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html>