依賴注入(DI)和控制反轉(IoC)
大型軟體應用程式的原始碼通常組織為多個單元。單位的定義通常因所使用的程式語言而異。例如,用過程程式語言(如 C)編寫的程式碼被組織成 functions
或 procedures
。類似地,物件導向程式語言(如 Java,Scala 和 C#)中的程式碼被組織成 classes
,interfaces
等。這些程式碼組織單元可以被視為構成整個軟體應用程式的單獨單元。
當應用程式具有多個單元時,當一個單元必須使用其他單元來完成其功能時,這些單元之間的相互依賴性就會突然出現。依賴單元可以被認為是 consumers
以及它們所依賴的單元作為特定功能的單元 6。
最簡單的程式設計方法是讓消費者通過決定應該在應用程式的整體執行中的哪些點例項化,使用和銷燬哪些提供者來完全控制軟體應用程式的流程。據說消費者在執行流程期間可以完全控制提供商,這對消費者來說是非常重要的。如果提供者有自己的依賴關係,消費者可能不得不擔心應該如何初始化(和釋放)提供者,使得控制流程隨著軟體中的單元數量的增加而變得越來越複雜。這種方法還增加了單元之間的耦合,使得單獨更換單元變得越來越困難而不必擔心破壞軟體的其他部分。
控制反轉 (IoC)是一種設計原則,主張將控制流活動(如單元發現,例項化和銷燬)外包給獨立於消費者和提供者的框架。IoC 背後的基本原則是將消費者和提供者分離,使軟體單元不必擔心發現,例項化和清理其依賴關係,並允許單元專注於自己的功能。這種分離有助於保持軟體的可擴充套件性和可維護性。
依賴注入是用於實現控制原理的反轉的技術之一,其中依賴性(提供者)的例項被注入到軟體單元(消費者)中而不是消費者必須找到並例項化它們。
Spring 框架在其核心包含一個依賴注入模組,它允許 Spring 管理的 bean 作為依賴項注入到其他 Spring 管理的 bean 中。