Spring Ioc / DI

如何理解Ioc

Ioc—Inversion of Control,即是控制反转。不是什么技术,而是一种设计思想。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。把对象的创建、初始化、销毁等工作交给spring容器来做。由spring容器控制对象的生命周期。即是将 new 的过程交给spring容器去处理

在这我们可以进一步拆开去理解:

  • 控制:何为控制?在传统 Java 程序设计中,我们直接在对象内部通过 new 的方式进行创建对象,让程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建。是谁去控制谁?Ioc控制着对象
  • 反转:在讲解反转时,我们先理解一下什么是正转?传统的方式是由我们自己在对象中主动控制去直接获取依赖对象,这叫做正转。而反转则是有Ioc容器来创建以及注入依赖对象,简单一句话就是对象从传统的主动创建变成被动创建

如图所示:

传统程序设计:

Ioc / DI 程序设计:

 

作用

Ioc 可以把传统程序设计方式设计成松耦合,提高代码的简洁性、开发效率和代码高复用性

DI

DI—Dependency Injection,即 "依赖注入":是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。和 Ioc 不同的是,Ioc是目的,DI是手段。

我们进一步深入分析→ "谁依赖于谁"、"为什么需要依赖"、"谁注入谁"、"注入了什么"

  • 谁依赖于谁:当然是应用程序依赖于IoC容器
  • 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源
  • 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象
  • 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

 

posted @ 2021-03-16 02:01  q-linyu  阅读(68)  评论(0)    收藏  举报