最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

Spring AOP三部曲之創(chuàng)建代理對象

2022-05-18 11:15 作者:做架構師不做框架師  | 我要投稿



什么是AOP?

AOP是一種編程范式,旨在通過允許分離橫切關注點來增加模塊化。他通過在不修改代碼本身的情況下向現(xiàn)有代碼添加額外的行為來實現(xiàn)這一點。

相反,我們可以分別聲明新方法和新行為。Spring的AOP框架幫助我們實現(xiàn)這些橫切關注點。

注意:本文是以5.2.3版本為講解。

步驟一:AutowireCapableBeanFactory類對容器生成的Bean添加后置處理器

在前兩篇關于“DI”的文章中,我們講到Spring對Bean屬性通過“populateBean()”方法是如何進行依賴注入的,今天我們講解通過“initializeBean()”方法是如何為Bean實例應用BeanPostProcessor后置處理器。

步驟二:為Bean實例對象添加BeanPostProcessor后置處理器的入口

初始化給定的bean實例,應用工廠回調以及init方法和beanPostProcessor后置處理器。從createBean調用定義的bean,從initializeBean調用現(xiàn)有bean實例。大致業(yè)務如下:

  • invokeAwareMethods:為Bean實例包裝相關屬性,如:bean名稱、Bean類加載器、bean工廠等。

  • applyBeanPostProcessorsBeforeInitialization:將 BeanPostProcessors 應用于給定的現(xiàn)有 bean 實例,調用它們的 postProcessBeforeInitialization 方法。返回的 bean 實例可能是當前bean的包裝后的bean。

  • invokeInitMethods:執(zhí)行初始化的方法,如果當前bean實現(xiàn)了InitializingBean接口就調用afterPropertiesSet()方法,如果是init-method屬性,就調用指定的方法

  • applyBeanPostProcessorsAfterInitialization:將 BeanPostProcessors 應用于給定的現(xiàn)有 bean 實例,調用它們的 postProcessAfterInitialization 方法。返回的 bean 實例可能是當前bean的包裝后的bean。

步驟三:調用BeanPostProcessor后置處理器實例對象初始化之前的處理方法

循環(huán)遍歷獲取所有的BeanPostProcessor后置處理器,調用所有的初始化前的處理方法

步驟四:調用BeanPostProcessor后置處理器實例對象初始化之后的處理方法

循環(huán)遍歷獲取所有的BeanPostProcessor后置處理器,調用所有的初始化后的處理方法

BeanPostProcessor有很多實現(xiàn)的子類,分別有不同的功能,而其中創(chuàng)建AOP代理對象的子類“AbstractAutoProxyCreator”,在這里我們繼續(xù)分析該類的postProcessAfterInitialization方法。

步驟五:選擇代理策略

大致業(yè)務如下:

  • 判斷當前是否需要代理(即Advice類、Pointcut類、Advisor類、AopInfrastructureBean類),如果不需要,返回當前bean實例

  • getAdvicesAndAdvisorsForBean:獲取這個bean的advice集合

  • createProxy:創(chuàng)建代理

驟六:獲取這個bean的advice集合

步驟七:創(chuàng)建AOP代理

大致業(yè)務如下:

  • buldAdvisors:確定給定bean的Advisor,包括特定的攔截器和公共攔截器,所有這些都適合Advisor接口。

  • getProxy:獲取指定的代理

步驟八:根據工廠的設置獲取代理

proxyFactory有JDK和CGLIB的,最終調用的是DefaultAopProxyFactory類的createAopProxy()方法

步驟九:為給定的AOP配置創(chuàng)建一個AopProxy

在這個方法里我們根據不同策略是使用JDK和CGLIB的代理。

時序圖

寫在最后

好兄弟可以點贊并關注我的公眾號“javaAnswer”,全部都是干貨。


Spring AOP三部曲之創(chuàng)建代理對象的評論 (共 條)

分享到微博請遵守國家法律
福鼎市| 南华县| 巴林右旗| 蒲城县| 施秉县| 武乡县| 饶河县| 沁源县| 天峻县| 南通市| 延川县| 新绛县| 开平市| 广灵县| 武宁县| 井冈山市| 平安县| 聊城市| 巧家县| 宜兰县| 承德县| 南岸区| 麻城市| 广宁县| 白朗县| 西城区| 陆河县| 迭部县| 乡宁县| 班戈县| 昭苏县| 扎囊县| 新安县| 万山特区| 七台河市| 双城市| 刚察县| 漳州市| 迁西县| 孙吴县| 达尔|