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

歡迎光臨散文網(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面向切面編程(下篇)的評論 (共 條)

分享到微博請遵守國家法律
项城市| 莲花县| 高邑县| 太仓市| 湖北省| 柘荣县| 抚宁县| 富蕴县| 莱州市| 广元市| 扶绥县| 临清市| 乡宁县| 天祝| 乾安县| 金川县| 军事| 湘潭市| 香格里拉县| 施秉县| 开平市| 饶河县| 即墨市| 茌平县| 宁明县| 鹤岗市| 太湖县| 五指山市| 晋中市| 沿河| 朔州市| 万宁市| 安溪县| 古浪县| 双辽市| 临高县| 崇义县| 丰县| 民权县| 收藏| 庄浪县|