Spring 設計思想

控制反轉 (IoC) 和依賴注入 (DI)

IoC(Inverse of Control, 控制反轉)是一種解耦的設計思想,就是將原本在程序中手動創建對象的控制權,交由Spring 框架來管理。它的主要目的是藉助於“第三方”(Spring 中的 IOC 容器) 實現具有依賴關係的對象之間的解耦(IOC 容器管理對象,只管使用即可),從而降低代碼之間的耦合度。IOC 是一個原則,不是一個模式。

IoC 在其他語言中也有應用,並非 Spring 特有。 IoC 容器是 Spring 用來實現 IoC 的載體, IoC 容器實際上就是個Map(key,value),Map 中存放的是各種對象。

ioc-patterns

將對象之間的相互依賴關係交給 IoC 容器來管理,並由 IoC 容器完成對象的注入。這樣可以很大程度上簡化應用的開發,把應用從複雜的依賴關係中解放出來。 **IoC 容器就像是一個工廠一樣,當需要創建一個對象的時候,只需要配置好配置文件/註解即可,完全不用考慮對象是如何被創建出來的。**IoC 容器負責創建對象,將對象連接在一起,配置這些對象,並從創建中處理這些對象的整個生命週期,直到它們被完全銷燬。

Spring 時代一般通過 XML 文件來配置 Bean,後來開發人員覺得 XML 文件來配置不太好,於是 SpringBoot 註解配置就慢慢開始流行起來。

Spring IoC的初始化過程:

Spring IoC的初始化過程

在實際項目中一個 Service 類如果有幾百甚至上千個類作爲它的底層,如果需要實例化這個 Service,每次都要搞清這個 Service 所有底層類的構造函數。如果利用 IOC 的話,只需要配置好,然後在需要的地方引用就行了,這大大增加了項目的可維護性且降低了開發難度。

控制反轉怎麼理解呢? 舉個例子:“對象a 依賴了對象 b,當對象 a 需要使用 對象 b的時候必須自己去創建。但是當系統引入了 IOC 容器後, 對象 a 和對象 b 之間就失去了直接的聯繫。這個時候,當對象 a 需要使用對象 b 的時候,可以指定 IOC 容器去創建一個對象 b 注入到對象 a 中”。 對象 a 獲得依賴對象 b 的過程,由主動行爲變爲了被動行爲,控制權翻轉,這就是控制反轉名字的由來。

DI(Dependecy Inject,依賴注入)是實現控制反轉的一種方式,依賴注入就是將實例變量傳入到一個對象中去。

AOP 與 IOC 實現原理

IOC: 控制反轉。IOC 利用 java 反射機制,將對象交給容器管理,只需要在 spring 配置文件中配置對應的 bean 以及設置相關的屬性,讓 spring 容器來生成類的實例對象以及管理對象。在 spring 容器啓動的時候,spring 會把在配置文件中配置的 bean 都初始化好,然後在需要調用的時候,就把它已經初始化好的那些 bean 分配給需要調用這些 bean 的類。

AOP: 面向切面編程。(Aspect-Oriented Programming) 。AOP 可以說是對 OOP 的補充和完善。OOP 引入封裝、繼承和多態等概念來建立一種對象層次結構,用以模擬公共行爲的一個集合。AOP 利用代理模式,實現 AOP 的技術,主要分爲兩大類:一是採用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行爲的執行;二是採用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼,屬於靜態代理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章