前面我們已經(jīng)介紹了AOP適用的一些業(yè)務(wù)場(chǎng)景以及簡(jiǎn)單的代碼實(shí)現(xiàn),當(dāng)時(shí)我們的切點(diǎn)是用execution表達(dá)式來(lái)配置的,這種方式有一些局限性在里面:
今天我們就來(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:
注解雖然定義好了,但是還用不了,因?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)我們的功能:
OK,到這里,我們就完成了利用AOP自定義注解的所有步驟。 怎么使用自定義注解?修飾Controller里的接口方法: 修飾Service里的方法:
接下來(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)在后面的文章中。 |
|
|