无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Spring AOP三部曲之調(diào)用

2022-05-24 11:43 作者:做架構(gòu)師不做框架師  | 我要投稿


前言

上篇文章我們講解了Spring AOP是如何創(chuàng)建代理對(duì)象的,在這篇文章我們繼續(xù)講解AOP是如何調(diào)用的。

這是從網(wǎng)上找的一個(gè)簡(jiǎn)單demo,大家可以對(duì)照著去理解。

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

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

在昨天我們講解了通過(guò)createAopProxy()方法里我們根據(jù)不同策略是通過(guò)JDK和CGLIB的代理,在這里我們以JDK創(chuàng)建代理對(duì)象為講解。

步驟二:創(chuàng)建JDK動(dòng)態(tài)代理

大致業(yè)務(wù)如下:

  • completeProxiedInterfaces:獲取代理類要實(shí)現(xiàn)的接口,包括:SpringProxy類、Advised類、DecoratingProxy類

  • findDefinedEqualsAndHashCodeMethods:檢查上面得到的接口有沒(méi)有equals方法或hashCode方法

  • newProxyInstance:創(chuàng)建代理對(duì)象

了解過(guò)動(dòng)態(tài)代理的人應(yīng)該都知道,生成的代理對(duì)象的調(diào)用方法是invoke()方法,所以我們通過(guò)invoke()方法去分析是如何調(diào)用的。

步驟三:處理代理實(shí)例上的方法調(diào)用并返回結(jié)果

InvocationHandler.invoke 的實(shí)現(xiàn)。大致業(yè)務(wù)如下:

  • equals:被代理對(duì)象未實(shí)現(xiàn)equals方法,使用默認(rèn)equals方法

  • hashCode:被代理對(duì)象未實(shí)現(xiàn)hashCode方法,使用默認(rèn)hashCode方法

  • ultimateTargetClass:獲取被代理對(duì)象的最終目標(biāo)類

  • invokeJoinpointUsingReflectioon:Advised接口或者其父接口中定義的方法,直接反射調(diào)用,不應(yīng)用通知

  • getInterceptorsAndDynamicInterceptionAdvice:獲取此方法的攔截鏈

  • 如果攔截鏈為空,直接反射調(diào)用JoinPoint

  • 如果攔截鏈非空,創(chuàng)建MethodInvocation(方法調(diào)用),應(yīng)用通知,并執(zhí)行JointPoint


步驟四:獲取此方法的攔截器鏈

通過(guò)該方法我們可以看到,攔截器鏈?zhǔn)菑腁dvisorChainFactory.getInterceptorsAndDynamicInterceptionAdvice()方法獲取到,并放入到緩存中,我們繼續(xù)往下看。

步驟五:獲取config中的advisor列表

大致業(yè)務(wù)如下:

  • 遍歷處理這些advisor

  • 如果是PointAdvisor,則判斷此Advisor能否應(yīng)用到目標(biāo)類方法上

  • 如果是IntorductionAdvisor,則判斷此Advisor能否應(yīng)用到目標(biāo)類targetClass上

  • 將滿足的放入到interceptor集合上


步驟六:觸發(fā)攔截器鏈的執(zhí)行

大致業(yè)務(wù)如下:

  • 如果Interceptor都執(zhí)行完了,則執(zhí)行joinPoint

  • 如果動(dòng)態(tài)匹配運(yùn)行時(shí)參數(shù)滿足匹配條件,執(zhí)行相應(yīng)方法,不滿足略過(guò)當(dāng)前Interceptor,調(diào)用下一個(gè)Interceptor

  • 否則執(zhí)行當(dāng)前Interceptor的目標(biāo)方法

步驟七:反射調(diào)用目標(biāo)方法

如果Interceptor都執(zhí)行完了,則反射調(diào)用當(dāng)前Interceptor的目標(biāo)方法

時(shí)序圖

寫在最后

好兄弟可以點(diǎn)贊并關(guān)注我的公眾號(hào)“javaAnswer”,全部都是干貨。


Spring AOP三部曲之調(diào)用的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
左云县| 清水县| 中西区| 顺平县| 鱼台县| 清镇市| 即墨市| 台江县| 扬州市| 南康市| 奉新县| 禹州市| 信宜市| 崇州市| 理塘县| 布尔津县| 扶绥县| 东兴市| 茶陵县| 五原县| 太仆寺旗| 星座| 富民县| 文昌市| 南川市| 余江县| 六枝特区| 兴山县| 大安市| 军事| 江津市| 宝坻区| 宜宾市| 象山县| 鄯善县| 金沙县| 福安市| 景泰县| 永兴县| 乌拉特前旗| 长寿区|