Spring源碼閱讀之AOP標籤動態代理分析-第2篇

上篇文章我們講到了 AOP 標籤解析,今天來講講 AOP 的動態代理具體實現,之前文章介紹過 BeanPostProcessor,該接口提供了兩個方法postProcessBeforeInitialization()postProcessAfterInitialization(),其在 bean 實例初始化前後被調用。如果不熟悉的朋友可以先看看之前的文章。

上篇文章我們講到註冊了一個AnnotationAwareAspectJAutoProxyCreator對象,該對象調用postProcessAfterInitialization()方法來創建 AOP 動態代理,具體實現由父類AbstractAutoProxyCreator來實現的,通過父類實現的postProcessAfterInitialization()方法來創建動態代理對象。

  1. 通過 AbstractAutoProxyCreator.postProcessAfterInitialization() 方法創建代理對象,如果需要的話。

  2. 若需要創建動態代理對象,則調用 AbstractAutoProxyCreator.wrapIfNecessary()獲取。

  3. 根據 bean 實例對應的 class 屬性和 beanName 獲取對應的 advices,即獲取切面定義信息。

  4. 獲取所有候選的 Advices 集合

  5. 從獲取到的候選 Advices 集合中挑選合格的 Advices

  6. 根據 bean 實例及獲取到的屬性創建動態代理對象。

  7. 根據條件選擇選擇使用 JDK 動態代理還是 CGlib 動態代理創建代理對象並返回。

到此,關於 Spring 系列源碼分析暫時告一段落(但是 Spring 遠遠不止這些知識點),如果讀者朋友有想了解的知識點,歡迎積極留言,後續遇到比較有趣的知識點在來補充。

面對當下互聯網流量的不斷增長,大家也越來越多的討論高併發大流量場景設計,比如淘寶雙 11 實時成交額是怎麼做到的;比如用戶在瀏覽網站時,根據其瀏覽過的頁面實時推薦一些可能感興趣的信息是怎麼做到的等等很多場景。接下來通過介紹系列Kafka文章,從其中來尋找一些解決之道,敬請期待。

創作不易,白嫖點個再看,喜歡加個關注

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