电竞比分网-中国电竞赛事及体育赛事平台

分享

厲害了!老大利用AOP實(shí)現(xiàn)自定義注解,半小時(shí)完成我三天工作量

 鷹兔牛熊眼 2020-05-23

來(lái)源:toutiao.com/i6795903732807631363

前面我們已經(jīng)介紹了AOP適用的一些業(yè)務(wù)場(chǎng)景以及簡(jiǎn)單的代碼實(shí)現(xiàn),當(dāng)時(shí)我們的切點(diǎn)是用execution表達(dá)式來(lái)配置的,這種方式有一些局限性在里面:

  • 靈活性不高,一個(gè)表達(dá)式只能切到某種同類型的方法

  • 個(gè)性化不足,很難對(duì)切面切到的所有方法中的一些做一些個(gè)性化的設(shè)置

這讓我想起有以前我還是一個(gè)菜鳥時(shí)接到的一個(gè)需求,要在所有接口中記錄請(qǐng)求日志,因?yàn)轫?xiàng)目比較老了,所以接口還是挺多的,我預(yù)估需要三天才能完成,我們老大鄙視了我一眼,然后花半小時(shí)就完成了。

今天我們就來(lái)講講切點(diǎn)的另一種配置方式:@annotation,通過(guò)@annotation配置切點(diǎn),我們可以靈活的控制切到哪個(gè)方法,同時(shí)可以進(jìn)行一些個(gè)性化的設(shè)置,今天我們就用它來(lái)實(shí)現(xiàn)一個(gè)記錄所有接口請(qǐng)求功能吧。

首先來(lái)看看我們要實(shí)現(xiàn)的效果

通過(guò)結(jié)果我們可以看到,我們的自定義注解EagleEye做到了統(tǒng)一的記錄下了請(qǐng)求鏈接、請(qǐng)求類型、請(qǐng)求IP、請(qǐng)求入?yún)?、?qǐng)求耗時(shí)、請(qǐng)求返回等信息。

是不是感覺(jué)還不錯(cuò)呢?下面我們就來(lái)一起動(dòng)手實(shí)現(xiàn)它吧!

添加依賴

新建一個(gè)Spring Boot項(xiàng)目,打開(kāi)pom.xml文件添加相關(guān)Maven依賴:

自定義一個(gè)注解

我們定義了一個(gè)注解,定義注解使用@interface:

  1. 定義了注解的生命周期為運(yùn)行時(shí)

  2. 定義了注解的作用域?yàn)榉椒?/p>

  3. 標(biāo)識(shí)該注解可以被JavaDoc記錄

  4. 定義注解名稱為EagleEye(鷹眼,哈哈~~)

  5. 定義一個(gè)元素desc,用來(lái)描述被修飾的方法

注解雖然定義好了,但是還用不了,因?yàn)闆](méi)有具體的實(shí)現(xiàn)邏輯,接下來(lái)我們用AOP實(shí)現(xiàn)它。

配置AOP切面

首先我們定義切點(diǎn):

我們通過(guò)@annotation來(lái)配置切點(diǎn),代表我們的AOP切面會(huì)切到所有用EagleEye注解修飾的類。

接下來(lái)我們利用@Around環(huán)繞增強(qiáng)來(lái)實(shí)現(xiàn)我們的功能:

  1. 首先我們先記錄請(qǐng)求鏈接、接口描述、請(qǐng)求類型、請(qǐng)求IP、請(qǐng)求入?yún)⑿畔?/p>

  2. 接著執(zhí)行我們注解切到的原方法邏輯

  3. 最后我們記錄整個(gè)請(qǐng)求耗時(shí)、返回結(jié)果

OK,到這里,我們就完成了利用AOP自定義注解的所有步驟。

怎么使用自定義注解?

修飾Controller里的接口方法:

修飾Service里的方法:

對(duì)于需要AOP增強(qiáng)的方法,我們只需要:
  1. 在方法上加上@EagleEye注解

  2. 通過(guò)desc元素設(shè)置方法的描述

接下來(lái)啟動(dòng)應(yīng)用,請(qǐng)求接口看一下控制臺(tái)輸出是不是像我們開(kāi)頭貼出的那樣吧。

總結(jié)

當(dāng)然,這僅僅是自定義注解的一種小用法而已,其他比如實(shí)現(xiàn)接口的自動(dòng)加解密、權(quán)限過(guò)濾等更多實(shí)用功能,都會(huì)出現(xiàn)在后面的文章中。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多