目錄
Spring AOP 實(shí)戰(zhàn)
HTTP 接口鑒權(quán)
方法調(diào)用日志
方法耗時(shí)統(tǒng)計(jì)
總結(jié)
End.
Spring AOP 實(shí)戰(zhàn)
看了上面這么多的理論知識(shí), 不知道大家有沒有覺得枯燥哈. 不過不要急, 俗話說理論是實(shí)踐的基礎(chǔ), 對(duì) Spring AOP 有了基本的理論認(rèn)識(shí)后, 我們來看一下下面幾個(gè)具體的例子吧.
下面的幾個(gè)例子是我在工作中所遇見的比較常用的 Spring AOP 的使用場(chǎng)景, 我精簡(jiǎn)了很多有干擾我們學(xué)習(xí)的注意力的細(xì)枝末節(jié), 以力求整個(gè)例子的簡(jiǎn)潔性.
下面幾個(gè) Demo 的源碼都可以在我的 Github 上下載到.
HTTP 接口鑒權(quán)
首先讓我們來想象一下如下場(chǎng)景: 我們需要提供的 HTTP RESTful 服務(wù), 這個(gè)服務(wù)會(huì)提供一些比較敏感的信息, 因此對(duì)于某些接口的調(diào)用會(huì)進(jìn)行調(diào)用方權(quán)限的校驗(yàn), 而某些不太敏感的接口則不設(shè)置權(quán)限, 或所需要的權(quán)限比較低(例如某些監(jiān)控接口, 服務(wù)狀態(tài)接口等).
實(shí)現(xiàn)這樣的需求的方法有很多, 例如我們可以在每個(gè) HTTP 接口方法中對(duì)服務(wù)請(qǐng)求的調(diào)用方進(jìn)行權(quán)限的檢查, 當(dāng)調(diào)用方權(quán)限不符時(shí), 方法返回錯(cuò)誤. 當(dāng)然這樣做并無不可, 不過如果我們的 api 接口很多, 每個(gè)接口都進(jìn)行這樣的判斷, 無疑有很多冗余的代碼, 并且很有可能有某個(gè)粗心的家伙忘記了對(duì)調(diào)用者的權(quán)限進(jìn)行驗(yàn)證, 這樣就會(huì)造成潛在的 bug.
那么除了上面的所說的方法外, 還有沒有別的比較優(yōu)雅的方式來實(shí)現(xiàn)呢? 當(dāng)然有啦, 不然我在這啰嗦半天干嘛呢, 它就是我們今天的主角: AOP.
讓我們來提煉一下我們的需求: