控制反轉,本質上是一種新型的設計模式,在springboot中有著廣泛的運用;同時也成為了springboot最重要的特徵之一。
ioc的思想,可以理解為一種「中介」的思想。
我們經常可以在各種地方看到,「ioc是一種解耦的思想」之類的話,但是它是如何實現解耦的?
打個比方,比如說你想找物件結婚。正常情況下,如果你要找物件,就是你主動去發出找物件的這個動作。
但是你還有另一種方法——你去找婚姻中介。
中介手上有各種各樣的物件的資訊,於是中介就可以主動把你要找的物件提供給你。
通過加乙個「中介」,來減少你跟「物件「之間的耦合。
對應在程式上,就是下面兩個圖的差別:
這個ioc容器就是「中介」,他知道其他「物件」的資訊,等你要乙個物件了他就直接給你分配你要的那種type。
ioc很好的體現了物件導向設計法則之一—— 好萊塢法則:「別找我們,我們找你」;即由ioc容器幫物件找相應的依賴物件並注入,而不是由物件主動去找。
2023年,martin fowler**了同乙個問題,既然ioc是控制反轉,那麼到底是「哪些方面的控制被反轉了呢?」,經過詳細地分析和論證後,他得出了答案:「獲得依賴物件的過程被反轉了」。控制被反轉之後,獲得依賴物件的過程由自身管理變為了由ioc容器主動注入。於是,他給「控制反轉」取了乙個更合適的名字叫做「依賴注入(dependency injection)」。他的這個答案,實際上給出了實現ioc的方法:注入。所謂依賴注入,就是由ioc容器在執行期間,動態地將某種依賴關係注入到物件之中。
所以,依賴注入(di)和控制反轉(ioc)是從不同的角度的描述的同一件事情,就是指通過引入ioc容器,利用依賴關係注入的方式,實現物件之間的解耦。
我們舉乙個生活中的例子,來幫助理解依賴注入的過程。大家對usb介面和usb裝置應該都很熟悉吧,usb為我們使用電腦提供了很大的方便,現在有很多的外部裝置都支援usb介面。
通過反射機制+xml實現
springboot的流程:
初始化spring容器
獲取掃瞄包下所有class
解析class中的註解資訊
封裝類反射後例項化物件
以儲存本地方法呼叫bean中的方法的時候:
下一期複習一下反射。
spring ioc di 介紹及使用
1.spring介紹 spring負責管理專案中的所有物件,看作是專案中物件的管家.spring一站式框架 2.spring導包 3.spring概念 ioc inverse or control 控制反轉 di dependency injection 依賴注入 實現ioc思想需要di做支援 注入...
Spring IOC DI 核心流程小結
下面進入正文 首先,來看這行 做了什麼 new 2 refresh 建立並初始 ioc 容器大致邏輯如下 載入 根據配置資訊,將掃瞄到的所有類載入成 beandefinition ps 關鍵資訊 beanname beanclass islazyinit issingon 註冊 將list根據註冊到...
談談對Spring IoC DI的理解
多讀多寫多記錄,多學多練多思考。banana.banuit gang 香柚幫 下面我來說一下個人對spring的控制反轉和依賴注入的理解,如有不足或者不正確的地方,希望大家及時幫我指出來,謝謝。我們都知道spring的兩大核心就是ioc di和aop,ioc的好處是進行物件之間的解耦,aop的好處是...