第⼆部分 核⼼思想
注意:IOC和AOP不是spring提出的,在spring之前就已經存在,只不過更偏向於理論化,spring在技術層次把這兩個思想做了⾮常好的實現(Java)
第1節 IoC
1.1 什麼是IoC?
IoC Inversion of Control (控制反轉/反轉控制),注意它是⼀個技術思想,不是⼀個技術實現描述的事情:Java開發領域對象的創建,管理的問題
傳統開發⽅式:⽐如類A依賴於類B,往往會在類A中new⼀個B的對象
IoC思想下開發⽅式:我們不⽤⾃⼰去new對象了,⽽是由IoC容器(Spring框架)去幫助我們實例化對 象並且管理它,我們需要使⽤哪個對象,去問IoC容器要即可
我們喪失了⼀個權利(創建、管理對象的權利),得到了⼀個福利(不⽤考慮對象的創建、管理等⼀系列
事情)
爲什麼叫做控制反轉?
控制:指的是對象創建(實例化、管理)的權利
反轉:控制權交給外部環境了(spring框架、IoC容器)
1.2 IoC解決了什麼問題
IoC解決對象之間的耦合問題
1.3 IoC和DI的區別
DI:Dependancy Injection(依賴注⼊)
怎麼理解:IOC和DI描述的是同⼀件事情,只不過⻆度不⼀樣罷了
第2節 AOP
2.1 什麼是AOP
AOP: Aspect oriented Programming ⾯向切⾯編程/⾯向⽅⾯編程
AOP是OOP的延續,從OOP說起OOP三⼤特徵:封裝、繼承和多態
oop是⼀種垂直繼承體系
OOP編程思想可以解決⼤多數的代碼重複問題,但是有⼀些情況是處理不了的,⽐如下⾯的在頂級⽗類 Animal中的多個⽅法中相同位置出現了重複代碼,OOP就解決不了
橫切邏輯代碼
橫切邏輯代碼存在什麼問題:
- 橫切代碼重複問題
- 橫切邏輯代碼和業務代碼混雜在⼀起,代碼臃腫,維護不⽅便
AOP出場,AOP獨闢蹊徑提出橫向抽取機制,將橫切邏輯代碼和業務邏輯代碼分析
代碼拆分容易,那麼如何在不改變原有業務邏輯的情況下,悄⽆聲息的把橫切邏輯代碼應⽤到原有的業務邏輯中,達到和原來⼀樣的效果,這個是⽐較難的
2.2 AOP在解決什麼問題
在不改變原有業務邏輯情況下,增強橫切邏輯代碼,根本上解耦合,避免橫切邏輯代碼重複
2.3 爲什麼叫做⾯向切⾯編程
「切」:指的是橫切邏輯,原有業務邏輯代碼我們不能動,只能操作橫切邏輯代碼,所以⾯向橫切邏輯
「⾯」:橫切邏輯代碼往往要影響的是很多個⽅法,每⼀個⽅法都如同⼀個點,多個點構成⾯,有⼀個
⾯的概念在⾥⾯