成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【好好面試】你必須要懂的Spring-Aop

honhon / 1799人閱讀

摘要:干貨點(diǎn)此處是好好面試系列文的第篇文章。而這也是出現(xiàn)的原因,沒錯(cuò),就是被設(shè)計(jì)出來彌補(bǔ)短板的。運(yùn)行結(jié)果如下運(yùn)行結(jié)果可想而知,的通過驗(yàn)證,的失敗。

【干貨點(diǎn)】此處是【好好面試】系列文的第10篇文章??赐暝撈恼?,你就可以了解Spring中Aop的相關(guān)使用和原理,并且能夠輕松解答Aop相關(guān)的面試問題。

在實(shí)際研發(fā)中,Spring是我們經(jīng)常會(huì)使用的框架,畢竟它們太火了,也因此Spring相關(guān)的知識點(diǎn)也是面試必問點(diǎn),今天我們就大話Aop。
特地在周末推文,因?yàn)樵撈恼麻喿x起來還是比較輕松詼諧的,當(dāng)然了,更主要的是周末的我也在充電學(xué)習(xí),希望有追求的朋友們也盡量不要放過周末時(shí)間,適當(dāng)充電,為了走上人生巔峰,迎娶白富美?!驹捳f有沒有白富美介紹(o???)】

接下來,直接進(jìn)入正文。

為什么要有aop

我們都知道Java是一種面向?qū)ο缶幊獭疽簿褪荗OP】的語言,不得不說面向?qū)ο缶幊淌且环N及其優(yōu)秀的設(shè)計(jì),但是任何語言都無法十全十美,對于OOP語言來說,當(dāng)需要為部分對象引入公共部分的時(shí)候,OOP就會(huì)引入大量的重復(fù)代碼【這些代碼我們可以稱之為橫切代碼】。而這也是Aop出現(xiàn)的原因,沒錯(cuò),Aop就是被設(shè)計(jì)出來彌補(bǔ)OOP短板的。Aop便是將這些橫切代碼封裝到一個(gè)可重用模塊中,繼而降低模塊間的耦合度,這樣也有利于后面維護(hù)。

Aop是什么東西

學(xué)過Spring的都知道,Spring內(nèi)比較核心的功能便是Ioc和Aop,Ioc的主要作用是應(yīng)用對象之間的解耦,而Aop則可以實(shí)現(xiàn)橫切代碼【如權(quán)限、日志等】與他們綁定的對象之間的解耦,舉個(gè)淺顯易懂的小栗子,在用戶調(diào)用很多接口的地方,我們都需要做權(quán)限認(rèn)證,判斷用戶是否有調(diào)用該接口的權(quán)限,如果每個(gè)接口都要自己去做類似的處理,未免有點(diǎn)sb了,也不夠裝x,因此Aop就可以派上用場了,將這些處理的代碼放到切片中,定義一下切片、連接點(diǎn)和通知,刷刷刷跑起來就ojbk了。

想要了解Aop,就要先理解以下幾個(gè)術(shù)語,如PointCut、Advice、JoinPoint。接下來盡量用白話文描述下。

PointCut【切點(diǎn)】
其實(shí)切點(diǎn)的概念很好理解,你想要去切某個(gè)東西之前總得先知道要在哪里切入是吧,切點(diǎn)格式如下:execution( com.nuofankj.springdemo.aop.Service.*(..))
可以看出來,格式使用了正常表達(dá)式來定義那個(gè)范圍內(nèi)的類、那些接口會(huì)被當(dāng)成切點(diǎn),簡單明了。

Advice
Advice行內(nèi)很多人都定義成了通知,但是我總覺得有點(diǎn)勉強(qiáng)。所謂的Advice其實(shí)就是定義了Aop何時(shí)被調(diào)用,確實(shí)有種通知的感覺,何時(shí)調(diào)用其實(shí)也不過以下幾種:

Before 在方法被調(diào)用之前調(diào)用

After 在方法完成之后調(diào)用

After-returning 在方法成功執(zhí)行之后調(diào)用

After-throwing 在方法拋出異常之后調(diào)用

Around 在被通知的方法調(diào)用之前和調(diào)用之后調(diào)用

JoinPoint【連接點(diǎn)】
JoinPoint連接點(diǎn),其實(shí)很好理解,上面又有通知、又有切點(diǎn),那和具體業(yè)務(wù)的連接點(diǎn)又是什么呢?沒錯(cuò),其實(shí)就是對應(yīng)業(yè)務(wù)的方法對象,因?yàn)槲覀冊跈M切代碼中是有可能需要用到具體方法中的具體數(shù)據(jù)的,而連接點(diǎn)便可以做到這一點(diǎn)。

給出一個(gè)Aop在實(shí)際中的應(yīng)用場景

先給出兩個(gè)業(yè)務(wù)內(nèi)的接口,一個(gè)是聊天,一個(gè)是購買東西


接下來該給出說了那么久的切片了

可以從中看到PointCut【切點(diǎn)】是

execution( com.nuofankj.springdemo.aop.Service.*(..))

Advice是

Before

JoinPoint【連接點(diǎn)】是

MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();

代碼淺顯易懂,其實(shí)就是將ChatService和BuyService里邊給userId做權(quán)限校驗(yàn)的邏輯抽出來做成切片。

那么如何拿到具體業(yè)務(wù)方法內(nèi)的具體參數(shù)呢?
這里是定義了一個(gè)新的注解

作用可以直接看注釋,使用地方如下

可以看到對應(yīng)接口使用了AuthPermission的注解,而取出的地方在于

是的,這樣便可以取出來對應(yīng)的接口傳遞的userId具體是什么了,而校驗(yàn)邏輯可以自己處理。

送佛送到西,不對,擼碼擼整套,接下來給出運(yùn)行的主類

可以看到,上面有一個(gè)接口傳遞的userId是1,另一個(gè)是123,而上面權(quán)限認(rèn)證只有1才說通過,否則會(huì)拋出異常。

運(yùn)行結(jié)果如下

運(yùn)行結(jié)果可想而知,1的通過驗(yàn)證,123的失敗。

Aop的原理解析

關(guān)于原理解析,由于大家都不喜歡看篇幅太長的文章,因此打算拆分成兩篇進(jìn)行,下篇文章會(huì)對Aop的原理和設(shè)計(jì)思想進(jìn)行解析,有興趣的朋友可以關(guān)注我一波。

公眾號主營:服務(wù)端編程相關(guān)技術(shù)解說,具體可以看歷史文章。

公眾號副業(yè):各種陪聊吹水,包括技術(shù)、就業(yè)、人生經(jīng)歷、大學(xué)生活、內(nèi)推等等。

歡迎關(guān)注,一起侃大山

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75201.html

相關(guān)文章

  • 好好面試】學(xué)完Aop,連動(dòng)態(tài)代理的原理都不懂?

    摘要:總結(jié)動(dòng)態(tài)代理的相關(guān)原理已經(jīng)講解完畢,接下來讓我們回答以下幾個(gè)思考題。 【干貨點(diǎn)】 此處是【好好面試】系列文的第12篇文章。文章目標(biāo)主要是通過原理剖析的方式解答Aop動(dòng)態(tài)代理的面試熱點(diǎn)問題,通過一步步提出問題和了解原理的方式,我們可以記得更深更牢,進(jìn)而解決被面試官卡住喉嚨的情況。問題如下 SpringBoot默認(rèn)代理類型是什么 為什么不用靜態(tài)代理 JDK動(dòng)態(tài)代理原理 CGLIB動(dòng)態(tài)代理...

    Keven 評論0 收藏0
  • 學(xué)Aop?看這篇文章就夠了?。。?/b>

    摘要:又是什么其實(shí)就是一種實(shí)現(xiàn)動(dòng)態(tài)代理的技術(shù),利用了開源包,先將代理對象類的文件加載進(jìn)來,之后通過修改其字節(jié)碼并且生成子類。 在實(shí)際研發(fā)中,Spring是我們經(jīng)常會(huì)使用的框架,畢竟它們太火了,也因此Spring相關(guān)的知識點(diǎn)也是面試必問點(diǎn),今天我們就大話Aop。特地在周末推文,因?yàn)樵撈恼麻喿x起來還是比較輕松詼諧的,當(dāng)然了,更主要的是周末的我也在充電學(xué)習(xí),希望有追求的朋友們也盡量不要放過周末時(shí)...

    boredream 評論0 收藏0
  • 寫給初入門/半路出家的前端er

    摘要:半路出家的前端程序員應(yīng)該不在少數(shù),我也是其中之一。年,馮馮同事兼師兄看我寫太費(fèi)勁,跟我說對面樓在找,問我要不要學(xué),說出來可能有點(diǎn)丟人,但是在那之前,我真得不知道什么是,什么是。 半路出家的前端程序員應(yīng)該不在少數(shù),我也是其中之一。 為何會(huì)走向前端 非計(jì)算機(jī)專業(yè)的我,畢業(yè)之后,就職于一家電力行業(yè)公司,做過設(shè)備調(diào)試、部門助理、測試,也寫過一段時(shí)間的QT,那三年的時(shí)間,最難過的不是工作忙不忙,...

    Cc_2011 評論0 收藏0
  • 面試篇】寒冬求職之你必須要懂的Web安全

    摘要:禁止內(nèi)聯(lián)腳本執(zhí)行規(guī)則較嚴(yán)格,目前發(fā)現(xiàn)使用。典型的攻擊流程受害者登錄站點(diǎn),并保留了登錄憑證。站點(diǎn)接收到請求后,對請求進(jìn)行驗(yàn)證,并確認(rèn)是受害者的憑證,誤以為是無辜的受害者發(fā)送的請求。攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者完成了攻擊。 隨著互聯(lián)網(wǎng)的發(fā)展,各種Web應(yīng)用變得越來越復(fù)雜,滿足了用戶的各種需求的同時(shí),各種網(wǎng)絡(luò)安全問題也接踵而至。作為前端工程師的我們也逃不開這個(gè)問題,今天一起...

    yeyan1996 評論0 收藏0
  • 面試篇】寒冬求職之你必須要懂的Web安全

    摘要:禁止內(nèi)聯(lián)腳本執(zhí)行規(guī)則較嚴(yán)格,目前發(fā)現(xiàn)使用。典型的攻擊流程受害者登錄站點(diǎn),并保留了登錄憑證。站點(diǎn)接收到請求后,對請求進(jìn)行驗(yàn)證,并確認(rèn)是受害者的憑證,誤以為是無辜的受害者發(fā)送的請求。攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者完成了攻擊。 隨著互聯(lián)網(wǎng)的發(fā)展,各種Web應(yīng)用變得越來越復(fù)雜,滿足了用戶的各種需求的同時(shí),各種網(wǎng)絡(luò)安全問題也接踵而至。作為前端工程師的我們也逃不開這個(gè)問題,今天...

    charles_paul 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<