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

歡迎光臨散文網(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)論 (共 條)

使用qq登录你需要登录后才可以评论。
黄冈市| 太湖县| 措勤县| 太原市| 广元市| 蓝山县| 沾化县| 泗水县| 奉贤区| 济宁市| 金堂县| 孝昌县| 观塘区| 黄平县| 四川省| 紫云| 宜州市| 新密市| 马鞍山市| 烟台市| 威海市| 临高县| 佳木斯市| 军事| 桂平市| 乌拉特中旗| 九江市| 巩义市| 古丈县| 迁西县| 凤凰县| 车致| 潮州市| 南皮县| 曲水县| 淮安市| 文水县| 嘉祥县| 晋江市| 金平| 措美县|