手寫Spring高級源碼筆記(二):核⼼思想IOC+AOP

第⼆部分 核⼼思想

 
注意:IOCAOP不是spring提出的,在spring之前就已經存在,只不過更偏向於理論化,spring在技術層次把這兩個思想做了⾮常好的實現(Java
 

1 IoC

 

1.1 什麼是IoC

 
IoC Inversion of Control (控制反轉/反轉控制),注意它是⼀個技術思想,不是⼀個技術實現描述的事情:Java開發領域對象的創建,管理的問題
 
傳統開發⽅式:⽐如類A依賴於類B,往往會在類Anew⼀個B的對象
IoC思想下開發⽅式:我們不⽤⾃⼰去new對象了,⽽是由IoC容器(Spring框架)去幫助我們實例化對 象並且管理它,我們需要使⽤哪個對象,去問IoC容器要即可
 
我們喪失了⼀個權利(創建、管理對象的權利),得到了⼀個福利(不⽤考慮對象的創建、管理等⼀系列
事情)
爲什麼叫做控制反轉?
控制:指的是對象創建(實例化、管理)的權利
反轉:控制權交給外部環境了(spring框架、IoC容器)

1.2 IoC解決了什麼問題

 
IoC解決對象之間的耦合問題
1.3 IoCDI的區別
 
DIDependancy Injection(依賴注⼊)
怎麼理解:IOCDI描述的是同⼀件事情,只不過⻆度不⼀樣罷了

2 AOP

 

2.1 什麼是AOP

 
AOP: Aspect oriented Programming ⾯向切⾯編程/⾯向⽅⾯編程
AOPOOP的延續,從OOP說起OOP三⼤特徵:封裝、繼承和多態
oop是⼀種垂直繼承體系

 

OOP編程思想可以解決⼤多數的代碼重複問題,但是有⼀些情況是處理不了的,⽐如下⾯的在頂級⽗類 Animal中的多個⽅法中相同位置出現了重複代碼,OOP就解決不了

橫切邏輯代碼

橫切邏輯代碼存在什麼問題:
  • 橫切代碼重複問題
  • 橫切邏輯代碼和業務代碼混雜在⼀起,代碼臃腫,維護不⽅便
AOP出場,AOP獨闢蹊徑提出橫向抽取機制,將橫切邏輯代碼和業務邏輯代碼分析
 
代碼拆分容易,那麼如何在不改變原有業務邏輯的情況下,悄⽆聲息的把橫切邏輯代碼應⽤到原有的業務邏輯中,達到和原來⼀樣的效果,這個是⽐較難的
 

2.2 AOP在解決什麼問題

在不改變原有業務邏輯情況下,增強橫切邏輯代碼,根本上解耦合,避免橫切邏輯代碼重複
 

2.3 爲什麼叫做⾯向切⾯編程

「切」:指的是橫切邏輯,原有業務邏輯代碼我們不能動,只能操作橫切邏輯代碼,所以⾯向橫切邏輯
「⾯」:橫切邏輯代碼往往要影響的是很多個⽅法,每⼀個⽅法都如同⼀個點,多個點構成⾯,有⼀個
⾯的概念在⾥⾯
 
 
 

準備了更多關於Java集合、JVM、多線程併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、數據庫、Zookeeper、分佈式緩存、數據結構面試解析+知識點集合等等可以去這個Github鏈接地址:

https://github.com/ThinkingHan/Java-note 閱讀,Star一下吧,感謝支持~

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