Spring-對IOC和AOP的自我見解

對於Spring,我們在學習它之前,就需要知道它的兩大核心,IOC和AOP,博主就談談自己對這兩大核心的看法和理解:

IOC

IOC,全稱Inversion of Control,就是控制反轉的意思,控制反轉一種設計原則,它也是一種設計思想,可以用來降低代碼之間的耦合度,在開發中,我們都追求“高內聚、低耦合”的代碼,IOC就是對此問題的一種解決方式,Spring中的依賴注入(Dependency Injection,簡稱DI)就是對IOC的一種實現機制,通過控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。

舉個例子吧

在傳統的三層架構如下:
在這裏插入圖片描述
我們發現如下三個類依次是強耦合的:
在這裏插入圖片描述
如果實現類少了一個,都不能通過程序的預編譯,這就是它們之間的強耦合性,由此,IOC設計思想出現了,它的解決方案如下:
在這裏插入圖片描述
IOC的出現,讓它們三個類之間的依賴被解開。

當然,直接這樣看來,好像還是不能理解IOC,我們再看一下傳統的三層架構之間的詳細依賴關係:
在這裏插入圖片描述
IOC優化之後的依賴關係:
在這裏插入圖片描述
這時候,如果我們想要擴展或者更改一個實現類,我們會發現傳統的方式,一定會更改原有的代碼,但是我們也深刻的明白,更改原有代碼是開發中的大忌,但是還是不得不這樣做。

比如我們需要更換ADao的實現類,傳統的方式如下:
在這裏插入圖片描述
我們通過IOC的方式,以Spring的配置文件爲例:
在這裏插入圖片描述
這時候,我們就只需要更改Spring的配置文件即可,相對於原來傳統的方式,這樣的方式是不是更值得使用呢?我們使用這種方式,都沒有直接更改原有的代碼,這種方式更利於我們程序的維護與擴展。

AOP

AOP,Aspect Oriented Programming,就是面向切面編程,它是面向對象OOP的一種延續,它是通過預編譯方式和運行期間動態代理實現程序功能的統一維護的一種技術。

還是以三層架構爲例吧

在這裏插入圖片描述
我們的程序都是完好的,但是這時候需要增加一項日誌的功能,記錄Service層中每個類中方法的調用情況。
想想還是比較簡單,只需要在該層中的每個方法中添加一句調用日誌的代碼即可,但是大量重複的操作,而且也更改了原來的代碼,這不是又犯了大忌。。
在這裏插入圖片描述

我們再來看看AOP的實現思想:
在這裏插入圖片描述
AOP的實現,就是在不影響原來代碼的基礎上,增強之前的代碼功能,想添加在哪裏就添加到哪裏,還能不影響之前的代碼。

就好像是我們找到程序的一個指定位置,並在此處劃一個“口子”,然後將我們需要增強的代碼放進去一樣。

以上內容就是博主自己對於IOC和AOP的一些見解,可能有些不足,也可能直接有問題,歡迎各路大佬前來指導。[\抱拳] [\抱拳]

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