springAOP的源碼分析

什麼是AOP

aop就是面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術;
相信大家在實際項目中都使用過了,比如日誌記錄啊,接口相應時間等等…

爲什麼要深入AOP

以前知道aop是通過動態代理來實現的,但是怎麼個代理法呢,確不是很清楚,不明白aop就像喫着米飯但是不知道大米是怎麼來的,這種感覺,你懂得,當然很多人說,那你怎麼不去了解芯片啊是怎麼做的?等等高科技問題,對此我只想說,收到!

首先說動態代理:

動態代理就是爲其他對象提供一個代理以控制對某個對象的訪問。
代理類主要負責爲委託了(真實對象)預處理消息、過濾消息、傳遞消息給委託類,代理類不現實具體服務,而是利用委託類來完成服務,並將執行結果封裝處理。
大家都知道java實現動態代理有兩種,一種是jdk動態代理,一種是cglib動態代理.
兩者區別大概就是jdk的話是通過實現接口來完成代理,代理類內持有原代理類的引用,所以原代理類必須實現接口,cglib的話就不需要了.有空可以去看看cglib是怎麼實現的,我只知道是通過反射.具體的忘記了…=-=
然後spring通過動態代理來實現aop的,spring的話如果類有實現某個接口就是使用jdk動態代理,如果沒有就使用的cglib的動態代理.
代碼測試:
TestServiceImpl實現了TestService,CglibServiceImpl沒有實現:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

怎麼生成的代理類

首先,應該瞭解,springioc容器其實就是Map裏面存的對象,
在這裏插入圖片描述但是對象是什麼時候存進去的呢?通過map的put方法,就找到了:
在這裏插入圖片描述
這時候看debug:
在這裏插入圖片描述
通過設置條件斷點,一步一步找,從初始化bean工廠後進行debug:
在這裏插入圖片描述
通過執行後置處理的時候找到我們的註解PostProcessor,spring的Processor其實就是一些列的接口,做完什麼事情的時候去做Processor裏面的方法.
在這裏插入圖片描述
然後就能看見createProxy方法:
在這裏插入圖片描述
然後再往下走就看見返回代理的主要方法:
在這裏插入圖片描述
可以通過斷點看每次返回的是jdk動態代理,還是cglib動態代理.這裏就是spring進行動態代理的源碼的地方,

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