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

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

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)建代理對象的評論 (共 條)

分享到微博請遵守國家法律
兴隆县| 大连市| 汶上县| 班玛县| 临城县| 吴旗县| 普安县| 雅安市| 鹿邑县| 山阴县| 资阳市| 公主岭市| 泰和县| 淮北市| 岢岚县| 淮阳县| 鄂伦春自治旗| 松溪县| 体育| 昌图县| 日照市| 兴安盟| 泰顺县| 通江县| 涟源市| 巍山| 孝昌县| 安多县| 清徐县| 祁阳县| 高要市| 湖州市| 大关县| 湾仔区| 涡阳县| 麦盖提县| 蒙自县| 海宁市| 班玛县| 乌拉特中旗| 微博|