Spring AOP相關(guān)知識點(diǎn)

AOP的應(yīng)用場景

1、日志記錄
2财破、權(quán)限驗(yàn)證
3掰派、效率檢查(個(gè)人在代碼上,喜歡用注解 + 切面左痢,實(shí)現(xiàn)校驗(yàn)靡羡,redis分布式鎖等功能)
4、事務(wù)管理(spring 的事務(wù)就是用AOP實(shí)現(xiàn)的)

spring AOP 和 AspectJ的關(guān)系

兩者都是為了實(shí)現(xiàn)AOP這個(gè)目的俊性,而出現(xiàn)的技術(shù)略步,spring aop 參考 AspectJ編程風(fēng)格,在基于Spring AOP編程的過程中磅废,基于AspectJ框架標(biāo)準(zhǔn)纳像,spring中定義了五種類型的通知荆烈,它們分別是:

  • 前置通知 (@Before)
  • 返回通知 (@AfterReturning)
  • 異常通知 (@AfterThrowing)
  • 后置通知 (@After)
  • 環(huán)繞通知 (@Around) :(優(yōu)先級最高)
image.png

簡述一下Spring AOP的設(shè)計(jì)原理

image.png

代理的創(chuàng)建

創(chuàng)建代理工廠:攔截器數(shù)組拯勉,目標(biāo)對象接口數(shù)組,目標(biāo)對象憔购。
創(chuàng)建代理工廠時(shí)宫峦,默認(rèn)會在攔截器數(shù)組尾部再增加一個(gè)默認(rèn)攔截器 — 用于最終的調(diào)用目標(biāo)方法。
當(dāng)調(diào)用 getProxy 方法的時(shí)候玫鸟,會根據(jù)接口數(shù)量大余 0 條件返回一個(gè)代理對象(JDK or Cglib)导绷。
注意:創(chuàng)建代理對象時(shí),同時(shí)會創(chuàng)建一個(gè)外層攔截器屎飘,這個(gè)攔截器就是 Spring 內(nèi)核的攔截器妥曲,用于控制整個(gè) AOP 的流程贾费。

代理的調(diào)用

當(dāng)對代理對象進(jìn)行調(diào)用時(shí),就會觸發(fā)外層攔截器檐盟。
外層攔截器根據(jù)代理配置信息褂萧,創(chuàng)建內(nèi)層攔截器鏈。創(chuàng)建的過程中葵萎,會根據(jù)表達(dá)式判斷當(dāng)前攔截是否匹配這個(gè)攔截器导犹。而這個(gè)攔截器鏈設(shè)計(jì)模式就是職責(zé)鏈模式。
當(dāng)整個(gè)鏈條執(zhí)行到最后時(shí)羡忘,就會觸發(fā)創(chuàng)建代理時(shí)那個(gè)尾部的默認(rèn)攔截器谎痢,從而調(diào)用目標(biāo)方法,最后返回卷雕。


image.png

什么時(shí)候Spring Aop會失效

  1. 要增強(qiáng)的類或方法沒被spring管理
  2. 要被增強(qiáng)的類或方法同時(shí)被spring和springMVC掃描节猿,spring mvc的xml中重復(fù)掃描了
  3. 用的注解方式?jīng)]有開啟注解支持
  4. 在一個(gè)類內(nèi)部調(diào)用時(shí),被調(diào)用方法的 AOP 聲明將不起作用
  5. 對于基于接口動態(tài)代理的 AOP 事務(wù)增強(qiáng)來說漫雕,由于接口的方法都必然是 public 這就要求實(shí)現(xiàn)類的實(shí)現(xiàn)方法也必須是 public的(不能是 protected沐批、private等),同時(shí)不能使用 static的修飾符蝎亚。
  6. 基于CGLib 字節(jié)碼動態(tài)代理的方案是通過擴(kuò)展被增強(qiáng)類九孩,動態(tài)創(chuàng)建其子類的方式進(jìn)行 AOP 增強(qiáng)植入的,由于使用 final发框、static躺彬、private 修飾符的方法都不能被子類覆蓋,這些方法將無法實(shí)施 AOP 增強(qiáng)梅惯。

文章參考自:
是什么導(dǎo)致了Spring Aop失效了宪拥?
AOP失效了...分析
Spring AOP有哪些通知類型,它們的執(zhí)行順序是怎樣的铣减?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末她君,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子葫哗,更是在濱河造成了極大的恐慌缔刹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劣针,死亡現(xiàn)場離奇詭異校镐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捺典,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門鸟廓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事引谜‰鼓埃” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵员咽,是天一觀的道長呐赡。 經(jīng)常有香客問我,道長骏融,這世上最難降的妖魔是什么链嘀? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮档玻,結(jié)果婚禮上怀泊,老公的妹妹穿的比我還像新娘。我一直安慰自己误趴,他們只是感情好霹琼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凉当,像睡著了一般枣申。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上看杭,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天忠藤,我揣著相機(jī)與錄音,去河邊找鬼楼雹。 笑死模孩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贮缅。 我是一名探鬼主播榨咐,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谴供!你這毒婦竟也來了块茁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤桂肌,失蹤者是張志新(化名)和其女友劉穎数焊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轴或,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昌跌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了照雁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饺蚊,靈堂內(nèi)的尸體忽然破棺而出萍诱,到底是詐尸還是另有隱情,我是刑警寧澤污呼,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布裕坊,位于F島的核電站,受9級特大地震影響燕酷,放射性物質(zhì)發(fā)生泄漏籍凝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一苗缩、第九天 我趴在偏房一處隱蔽的房頂上張望饵蒂。 院中可真熱鬧,春花似錦酱讶、人聲如沸退盯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渊迁。三九已至,卻和暖如春灶挟,著一層夾襖步出監(jiān)牢的瞬間琉朽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工稚铣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漓骚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓榛泛,卻偏偏與公主長得像蝌蹂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子曹锨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容