五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

Spring框架入門必備教程-AOP面向切面編程(下篇)

2021-03-16 10:02 作者:動力節(jié)點(diǎn)小王本王  | 我要投稿



AspectJ?基于注解的 AOP?實(shí)現(xiàn)

AspectJ 提供了以注解方式對于AOP 的實(shí)現(xiàn)。

(1)?實(shí)現(xiàn)步驟

A、 Step1:定義業(yè)務(wù)接口與實(shí)現(xiàn)類

B、Step2:定義切面類

類中定義了若干普通方法,將作為不同的通知方法,用來增強(qiáng)功能。

C、Step3:聲明目標(biāo)對象切面類對象

D、 Step4:注冊?AspectJ?的自動代理

在定義好切面Aspect?后,需要通知 Spring?容器,讓容器生成“目標(biāo)類+ 切面”的代理對象。這個(gè)代理是由容器自動生成的。只需要在 Spring?配置文件中注冊一個(gè)基于aspectj?的自動代理生成器,其就會自動掃描到@Aspect?注解,并按通知類型與切入點(diǎn),將其織入,并生成代理。

<aop:aspectj-autoproxy/>的底層是由AnnotationAwareAspectJAutoProxyCreator 實(shí)現(xiàn)的。從其類名就可看出, 是基于AspectJ 的注解適配自動代理生成器。

其工作原理是,<aop:aspectj-autoproxy/>通過掃描找到@Aspect?定義的切面類,再由切面類根據(jù)切入點(diǎn)找到目標(biāo)類的目標(biāo)方法,再由通知類型找到切入的時(shí)間點(diǎn)。

E、 Step5:測試類中使用目標(biāo)對象的 id

(2)?[掌握]@Before?前置通知-方法有 JoinPoint?參數(shù)

?在目標(biāo)方法執(zhí)行之前執(zhí)行。被注解為前置通知的方法,可以包含一個(gè)JoinPoint?類型參數(shù)。該類型的對象本身就是切入點(diǎn)表達(dá)式。通過該參數(shù),可獲取切入點(diǎn)表達(dá)式、方法簽名、目標(biāo)對象等。

不光前置通知的方法,可以包含一個(gè)JoinPoint 類型參數(shù),所有的通知方法均可包含該參數(shù)。

(3)?[掌握]@AfterReturning?后置通知-注解有 returning?屬性

在目標(biāo)方法執(zhí)行之后執(zhí)行。由于是目標(biāo)方法之后執(zhí)行,所以可以獲取到目標(biāo)方法的返回值。該注解的returning?屬性就是用于指定接收方法返回值的變量名的。所以,被注解為后置通知的方法,除了可以包含 JoinPoint?參數(shù)外, 還可以包含用于接收返回值的變量。該變量最好為 Object?類型,因?yàn)槟繕?biāo)方法的返回值可能是任何類型。

接口增加方法:

實(shí)現(xiàn)方法:

定義切面:

(4)?[掌握]@Around?環(huán)繞通知-增強(qiáng)方法有ProceedingJoinPoint?參數(shù)

在目標(biāo)方法執(zhí)行之前之后執(zhí)行。被注解為環(huán)繞增強(qiáng)的方法要有返回值, Object?類型。并且方法可以包含一個(gè)ProceedingJoinPoint?類型的參數(shù)。接ProceedingJoinPoint?其有一個(gè)proceed()方法,用于執(zhí)行目標(biāo)方法。若目標(biāo)方法有返回值,則該方法的返回值就是目標(biāo)方法的返回值。最后,環(huán)繞增強(qiáng)方法將其返回值返回。該增強(qiáng)方法實(shí)際是攔截了目標(biāo)方法的執(zhí)行。

接口增加方法:

定義切面:

(5)?[了解]@AfterThrowing?異常通知-注解中有 throwing?屬性

在目標(biāo)方法拋出異常后執(zhí)行。該注解的throwing 屬性用于指定所發(fā)生的異常類對象。當(dāng)然,被注解為異常通知的方法可以包含一個(gè)參數(shù) Throwable,參數(shù)名稱為throwing 指定的名稱,表示發(fā)生的異常對象。

增加業(yè)務(wù)方法:

方法實(shí)現(xiàn):

定義切面:

(6)?[了解]@After?最終通知

無論目標(biāo)方法是否拋出異常,該增強(qiáng)均會被執(zhí)行。

增加方法:

方法實(shí)現(xiàn):

定義切面:

(7)?@Pointcut?定義切入點(diǎn)

當(dāng)較多的通知增強(qiáng)方法使用相同的execution 切入點(diǎn)表達(dá)式時(shí),編寫、維護(hù)均較為麻煩。AspectJ 提供了@Pointcut 注解,用于定義execution 切入點(diǎn)表達(dá)式。

其用法是,將@Pointcut 注解在一個(gè)方法之上,以后所有的execution 的value 屬性值均可使用該方法名作為切入點(diǎn)。代表的就是@Pointcut 定義的切入點(diǎn)。這個(gè)使用@Pointcut 注解的方法一般使用private 的標(biāo)識方法,即沒有實(shí)際作用的方法。


最后奉上視頻教程??,視頻觀看效果更佳??!走過路過別忘素質(zhì)三連哦~~


Spring框架入門必備教程-AOP面向切面編程(下篇)的評論 (共 條)

分享到微博請遵守國家法律
沙雅县| 云梦县| 集贤县| 丽水市| 大城县| 元阳县| 黔江区| 凉城县| 巴南区| 开远市| 新昌县| 色达县| 中牟县| 临泽县| 镇远县| 临桂县| 鹤山市| 江达县| 永胜县| 钟祥市| 新宁县| 白水县| 霍城县| 新龙县| 武威市| 太白县| 游戏| 当阳市| 贵南县| 怀宁县| 海口市| 轮台县| 红原县| 广元市| 石渠县| 涟水县| 蒙山县| 政和县| 清水河县| 瓮安县| 大城县|