Spring AOP 要點(diǎn)

Spring對(duì)AOP的支持

Spring中AOP代理由Spring的IOC容器負(fù)責(zé)生成吐句、管理,其依賴(lài)關(guān)系也由IOC容器負(fù)責(zé)管理店读。因此嗦枢,AOP代理可以直接使用容器中的其它bean實(shí)例作為目標(biāo),這種關(guān)系可由IOC容器的依賴(lài)注入提供屯断。Spring創(chuàng)建代理的規(guī)則為:

  • 1文虏、默認(rèn)使用Java動(dòng)態(tài)代理來(lái)創(chuàng)建AOP代理侣诺,這樣就可以為任何接口實(shí)例創(chuàng)建代理了

  • 2、當(dāng)需要代理的類(lèi)不是代理接口的時(shí)候氧秘,Spring會(huì)切換為使用CGLIB代理年鸳,也可強(qiáng)制使用CGLIB cglib是一個(gè)強(qiáng)大的,高性能,高質(zhì)量的Code生成類(lèi)庫(kù)。它可以在運(yùn)行期擴(kuò)展Java類(lèi)與實(shí)現(xiàn)Java接口丸相。cglib封裝了asm搔确,可以在運(yùn)行期動(dòng)態(tài)生成新的class。cglib用于AOP灭忠,jdk中的proxy必須基于接口膳算,cglib卻沒(méi)有這個(gè)限制。

原理區(qū)別:
  • 實(shí)現(xiàn)方法: java動(dòng)態(tài)代理是利用反射機(jī)制生成一個(gè)實(shí)現(xiàn)代理接口的匿名類(lèi)弛作,在調(diào)用具體方法前調(diào)用InvokeHandler來(lái)處理涕蜂。而cglib動(dòng)態(tài)代理是利用asm開(kāi)源包,對(duì)代理對(duì)象類(lèi)的class文件加載進(jìn)來(lái)映琳,通過(guò)修改其字節(jié)碼生成子類(lèi)來(lái)處理机隙。
  • 限制規(guī)則: 對(duì)于基于接口動(dòng)態(tài)代理的AOP事務(wù)增強(qiáng)來(lái)說(shuō),由于接口的方法都必然是public的刊头,這就要求實(shí)現(xiàn)類(lèi)的實(shí)現(xiàn)方法也必須是public的(不能是protected黍瞧、private等)诸尽,同時(shí)不能使用static的修飾符原杂。所以可以實(shí)施接口動(dòng)態(tài)代理的方法只能是使用“public”或“public final”修飾符的方法, 其他方法不可能被動(dòng)態(tài)代理您机,相應(yīng)的也就不能實(shí)施AOP增強(qiáng)穿肄。基于CGLib字節(jié)碼動(dòng)態(tài)代理的方案是通過(guò)擴(kuò)展被增強(qiáng)類(lèi)际看,動(dòng)態(tài)創(chuàng)建其子類(lèi)的方式進(jìn)行AOP增強(qiáng)植入的咸产。由于使用final、static仲闽、private修飾符的方法都不能被子類(lèi)覆蓋脑溢,相應(yīng)的,這些方法將無(wú)法實(shí)施AOP增強(qiáng)赖欣。

事務(wù)管理

方法的可見(jiàn)度和 @Transactional

在使用代理的時(shí)候屑彻,@Transactional 注解應(yīng)該只被應(yīng)用到 public 可見(jiàn)度的方法上。 如果你在 protected顶吮、private 或者 package-visible 的方法上使用 @Transactional 注解社牲,系統(tǒng)也不會(huì)報(bào)錯(cuò), 但是這個(gè)被注解的方法將不會(huì)執(zhí)行已配置的事務(wù)設(shè)置悴了。如果你非要注解非公共方法的話搏恤,請(qǐng)參考使用AspectJ
針對(duì)事務(wù)當(dāng)中有些內(nèi)部方法(有一些內(nèi)部方法我們不希望放在接口中防止被誤用)违寿, 我們就無(wú)法用@Transactional 來(lái)解決了。 那么我們可以單獨(dú)寫(xiě)一個(gè)事務(wù)的實(shí)現(xiàn)類(lèi)熟空, 并將需要事務(wù)執(zhí)行的代碼當(dāng)做參數(shù)傳給這個(gè)類(lèi)中的方法藤巢。


1.png
2.png
3.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市痛阻,隨后出現(xiàn)的幾起案子菌瘪,更是在濱河造成了極大的恐慌,老刑警劉巖阱当,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俏扩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弊添,警方通過(guò)查閱死者的電腦和手機(jī)录淡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)油坝,“玉大人嫉戚,你說(shuō)我怎么就攤上這事〕喝Γ” “怎么了彬檀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瞬女。 經(jīng)常有香客問(wèn)我窍帝,道長(zhǎng),這世上最難降的妖魔是什么诽偷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任坤学,我火速辦了婚禮,結(jié)果婚禮上报慕,老公的妹妹穿的比我還像新娘深浮。我一直安慰自己,他們只是感情好眠冈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布飞苇。 她就那樣靜靜地躺著,像睡著了一般蜗顽。 火紅的嫁衣襯著肌膚如雪布卡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天诫舅,我揣著相機(jī)與錄音羽利,去河邊找鬼。 笑死刊懈,一個(gè)胖子當(dāng)著我的面吹牛这弧,可吹牛的內(nèi)容都是我干的娃闲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼匾浪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼皇帮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛋辈,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤属拾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后冷溶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體渐白,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年逞频,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纯衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苗胀,死狀恐怖襟诸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情基协,我是刑警寧澤歌亲,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站澜驮,受9級(jí)特大地震影響陷揪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泉唁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一鹅龄、第九天 我趴在偏房一處隱蔽的房頂上張望揩慕。 院中可真熱鬧亭畜,春花似錦、人聲如沸迎卤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜗搔。三九已至劲藐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間樟凄,已是汗流浹背聘芜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缝龄,地道東北人汰现。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓挂谍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瞎饲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子口叙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)嗅战,斷路器妄田,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評(píng)論 6 342
  • 一> 代理模式 概述 代理(Proxy)是一種設(shè)計(jì)模式, 提供了對(duì)目標(biāo)對(duì)象另外的訪問(wèn)方式驮捍;即通過(guò)代理訪問(wèn)目標(biāo)對(duì)象疟呐。...
    奮斗的老王閱讀 1,111評(píng)論 0 50
  • **** AOP 面向切面編程 底層原理 代理!6摇萨醒! 今天AOP課程1、 Spring 傳統(tǒng) AOP2苇倡、 Spri...
    luweicheng24閱讀 1,365評(píng)論 0 1
  • 書(shū)中自有顏如玉富纸,書(shū)中自有黃金屋
    一天一點(diǎn)進(jìn)步閱讀 163評(píng)論 0 0