深入理解spring容器中的控制反轉(IOC)和依賴注入(DI)
什麼是控制反轉(IOC)?
“控制”就是指一件事物對另一件事物進行一種管理,而另一件事物處在一件事物的管理之下,這就叫控制。
在物件導向程式設計的時候,每一個程式的執行都是依賴於很多的物件, 這些物件一起相互協調工作才使得程式得以執行。而在程式設計早期主流框架還沒有出現的時候,這些物件都是我們程式設計師new出來的。這樣子就會出現很多問題,比如耦合度太強,不便於維護;每次執行程式的某個模組的時候可能都會去建立相應的物件(例如:servlet中的一個物件,如果使用new的方式建立的話,那麼每次使用者向這個servlet傳送請求的時候都會去new這個物件。那麼如果是很多使用者訪問的話,這個開銷還是很大的),造成資源的浪費。
有了spring框架之後,這些物件建立的任務就交給了它,你想用的時候就找它要就OK。而這個物件是交給spring集中在一個地方去管理的,這樣子的話耦合性就大大降低,而且便於維護(通俗點講就是便於修改)。需要了就找它要。
“反轉”指轉向相反的方向。分析上邊這兩段話的話:建立物件其實就是一種“控制”,之前時候是程式設計師自己去new,這就叫做”正向“,程式設計師想在哪new就在哪new。而讓spring去管理物件的時候,程式設計師不再有主動權了,變成了被動的伸手去要,相對於之前的“正向”現在完全反過來了。所以叫做“反轉”
拿別人的言語來理解上邊介紹的“控制反轉”這個詞(轉載https://www.cnblogs.com/xxzhuang/p/5948902.html):在控制“正”轉的情況下,在任何一個有請求作用的系統當中,至少需要有兩個類互相配合工作,在一個入口類下使用new關鍵字建立另一個類的物件例項,這就好比在物件導向程式設計的思想下,“我“充當一個入口類,在這個入口類中,我每次吃飯的時候都要買一雙一次性筷子(每一次使用都要new一次),在這樣的關係下,是”我“(即呼叫者)每次都要”主動“去買一次性筷子(另一個類),我對筷子說你老老實實的過來我的手上。是我控制了筷子,在這種控制“正”轉的關係下,放在現實生活當中,肯定是不現實的,更確切的做法是,買一雙普通的筷子(非一次性),把他放在一個容器當中(在Spring中叫做IOC容器),你需要使用的時候就對容器說:IOC我想要用筷子(向容器發出請求),接著筷子就會”注入“到的手上,而在這個過程當中,你不再是控制方,反而演變成一名請求者(雖然本身還是呼叫者),依賴於容器給予你資源,控制權坐落到了容器身上,於是這就是人們俗稱的控制反轉。
什麼是依賴注入(DI)?
上邊提到的“控制反轉”是一種思想,側重於原理,通過這種思想可以把物件建立出來;而依賴注入的話可以理解成是給建立出來的物件的屬性賦值的過程,側重於實現。
【注】這樣子去理解IOC/DI的關係:他們是對同一個事情的不同描述。依賴注入是站在應用程式的角度在描述整個過程,而控制反轉是從容器的角度在描述。
相關文章
- 深入理解控制反轉(IoC)和依賴注入(DI)依賴注入
- 深入理解IoC(控制反轉)、DI(依賴注入)依賴注入
- 理解Spring中依賴注入(DI)與控制反轉(IoC)Spring依賴注入
- PHP 控制反轉(IoC) 和 依賴注入(DI)PHP依賴注入
- PHP 控制反轉(IOC)和依賴注入(DI)PHP依賴注入
- 控制反轉與依賴注入(IOC和DI)依賴注入
- 控制反轉(IoC)與依賴注入(DI)依賴注入
- .NET IoC模式依賴反轉(DIP)、控制反轉(Ioc)、依賴注入(DI)模式依賴注入
- Spring框架之IOC/DI(控制反轉/依賴注入)Spring框架依賴注入
- 解構控制反轉(IoC)和依賴注入(DI)依賴注入
- OOD、DIP、IOC、DI、依賴注入容器(即 控制反轉容器,IOC Container)依賴注入AI
- Java:控制反轉(IoC)與依賴注入(DI)Java依賴注入
- php實現依賴注入(DI)和控制反轉(IOC)PHP依賴注入
- 8.(轉)控制反轉(IoC)與依賴注入(DI)依賴注入
- 淺析依賴倒轉、控制反轉、IoC 容器、依賴注入。依賴注入
- 控制反轉(IOC)與依賴注入(DI)模式解析及實踐依賴注入模式
- Spring4學習(一)IoC控制反轉也稱為DI依賴注入Spring依賴注入
- Spring 控制反轉和依賴注入Spring依賴注入
- java 控制反轉和依賴注入的理解Java依賴注入
- 深入探討控制反轉(IOC)與依賴注入(DI)模式原理與應用實踐依賴注入模式
- 軟體工程入門-輕鬆理解依賴注入 (DI) 和 IoC 容器軟體工程依賴注入
- 【Spring】Spring依賴注入與控制反轉理解Spring依賴注入
- 寫一個簡單的IoC容器案例,理解什麼是依賴注入和控制反轉依賴注入
- IOC容器和依賴注入依賴注入
- 前端理解依賴注入(控制反轉)前端依賴注入
- spring中的控制反轉和依賴注入 --講解Spring依賴注入
- Spring系列第二講 控制反轉(IoC)與依賴注入(DI),晦澀難懂麼?Spring依賴注入
- 依賴注入和控制反轉依賴注入
- C#中的依賴注入和IoC容器C#依賴注入
- 面試官:你是如何理解Java中依賴倒置和依賴注入以及控制反轉的?面試Java依賴注入
- Spring 依賴注入 DISpring依賴注入
- 什麼是控制反轉(IOC)?什麼是依賴注入?依賴注入
- Spring理論基礎-控制反轉和依賴注入Spring依賴注入
- Spring IOC——依賴注入Spring依賴注入
- CommunityToolkit.Mvvm8.1 IOC依賴注入控制反轉(5)UnityMVVM依賴注入
- 深入理解DIP、IoC、DI以及IoC容器
- 對控制反轉和依賴注入的突然頓悟依賴注入
- ASP.NET Core中的依賴注入(2):依賴注入(DI)ASP.NET依賴注入