依赖注入(DI)和控制反转(IoC)

大型软件应用程序的源代码通常组织为多个单元。单位的定义通常因所使用的编程语言而异。例如,用过程编程语言(如 C)编写的代码被组织成 functionsprocedures。类似地,面向对象编程语言(如 Java,Scala 和 C#)中的代码被组织成 classesinterfaces 等。这些代码组织单元可以被视为构成整个软件应用程序的单独单元。

当应用程序具有多个单元时,当一个单元必须使用其他单元来完成其功能时,这些单元之间的相互依赖性就会突然出现。依赖单元可以被认为是 consumers 以及它们所依赖的单元作为特定功能的单元 6。

最简单的编程方法是让消费者通过决定应该在应用程序的整体执行中的哪些点实例化,使用和销毁哪些提供者来完全控制软件应用程序的流程。据说消费者在执行流程期间可以完全控制提供商,这对消费者来说是非常重要的。如果提供者有自己的依赖关系,消费者可能不得不担心应该如何初始化(和释放)提供者,使得控制流程随着软件中的单元数量的增加而变得越来越复杂。这种方法还增加了单元之间的耦合,使得单独更换单元变得越来越困难而不必担心破坏软件的其他部分。

控制反转 (IoC)是一种设计原则,主张将控制流活动(如单元发现,实例化和销毁)外包给独立于消费者和提供者的框架。IoC 背后的基本原则是将消费者和提供者分离,使软件单元不必担心发现,实例化和清理其依赖关系,并允许单元专注于自己的功能。这种分离有助于保持软件的可扩展性和可维护性。

依赖注入是用于实现控制原理的反转的技术之一,其中依赖性(提供者)的实例被注入到软件单元(消费者)中而不是消费者必须找到并实例化它们。

Spring 框架在其核心包含一个依赖注入模块,它允许 Spring 管理的 bean 作为依赖项注入到其他 Spring 管理的 bean 中。