若要理解Spring IoC的優勢,首先要理解控制反轉的思想。控制反轉(Inversion of Control,縮寫爲IoC),是面向對象編程中的一種設計原則,能夠用來減低計算機代碼之間的耦合度。其中最多見的方式叫作依賴注入(Dependency Injection,簡稱DI),還有一種方式叫「依賴查找」(Dependency Lookup)。經過控制反轉,對象在被建立的時候,由一個調控系統(IOC容器),將其所依賴的對象的引用傳遞給它。也能夠說,依賴被注入到對象中。
控制是否被反轉其實正是框架和庫(Framework and Library)的區別。
客戶程序員使用庫,框架使用客戶程序員。
對於一個庫而言,用戶程序員使用的方式是主動調用它,這是一般狀況的作法,也就是「正向」控制;而對於一個框架,每每將用戶程序員編寫的代碼註冊到框架中,最後由框架來調用用戶程序員編寫的代碼,這就構成了控制反轉。也就是說,控制反轉的關鍵在於「控制者」是誰。對於一個庫而言,複用的可能只是算法和數據結構;而對於一個框架而言,複用的每每還有控制流邏輯,這也是控制反轉的結果。
經過以上的描述,能夠看到彷佛有點回調的感受了。程序員
ioc的思想最核心的地方在於,資源不禁使用資源的雙方管理,而由不使用資源的第三方管理,這能夠帶來不少好處:
- 第一,資源集中管理,實現資源的可配置和易管理。
- 第二,下降了使用資源雙方的依賴程度,也就是咱們說的耦合度。
也就是說,甲方要達成某種目的不須要直接依賴乙方,它只須要將想要達到的目的告訴第三方機構就能夠了。好比甲方須要一雙襪子,而乙方它賣一雙襪子,它要把襪子賣出去,並不須要本身去直接找到一個買家來完成襪子的賣出。它也只須要找第三方,告訴別人我要賣一雙襪子。這下好了,甲乙雙方進行交易活動,都不須要本身直接去找賣家與買家,至關於程序內部開放接口,賣家由第三方做爲參數傳入。甲乙互相不依賴,並且只有在進行交易活動的時候,甲才和乙產生聯繫。反之亦然。這樣作什麼好處麼呢,甲乙能夠在對方不真實存在的狀況下獨立存在,並且保證不交易時候無聯繫,想交易的時候能夠很容易的產生聯繫。甲乙交易活動不須要雙方見面,避免了雙方的互不信任形成交易失敗的問題。由於交易由第三方來負責聯繫,並且甲乙都認爲第三方可靠。那麼交易就能很可靠很靈活的產生和進行了。這就是ioc的核心思想。在實際生活中常見的第三方支付平臺和電子商務平臺就是這樣的道理。利用龐大的ioc容器,交易雙方以外的第三方,提供可靠性可依賴可靈活變動交易方的資源管理中心。另外人事代理也是僱傭機構和我的以外的第三方。
在以上的描述中,尚學堂陳老師從中爲你們提煉了兩個專業詞彙:依賴注入和控制反轉。所謂的依賴注入是甲方開放接口,在它須要的時候,可以將乙方傳遞進來(注入);所謂的控制反轉,甲乙雙方不相互依賴,交易活動的進行不依賴於甲乙任何一方,整個活動的進行由第三方負責管理。這就是spring IoC的思想所在。
算法