Spring03——有關(guān)于 Spring AOP 的總結(jié)

本文將為各位帶來 Spring 的另一個重點知識點 —— Spring AOP灾常。關(guān)注我的公眾號「Java面典」照激,每天 10:24 和你一起了解更多 Java 相關(guān)知識點发魄。

什么是 AOP

面向切面編程(aspect-oriented programming),是一種將橫切關(guān)注點與業(yè)務(wù)邏輯分離的編程方式俩垃。每個橫切關(guān)注點都集中在一個地方励幼,而不是分散在多處代碼中。這樣使我們的服務(wù)模塊更加簡潔口柳,因為它們只包含了主要關(guān)注點的代碼苹粟,而次要的功能或者說輔助的功能被轉(zhuǎn)移到切面中了。

AOP 主要應(yīng)用場景有:

  1. Authentication 權(quán)限
  2. Caching 緩存
  3. Context passing 內(nèi)容傳遞
  4. Error handling 錯誤處理
  5. Lazy loading 懶加載
  6. Debugging 調(diào)試
  7. logging, tracing, profiling and monitoring 記錄跟蹤 優(yōu)化 校準
  8. Performance optimization 性能優(yōu)化
  9. Persistence 持久化
  10. Resource pooling 資源池
  11. Synchronization 同步
  12. Transactions 事務(wù)

AOP 核心知識點

主要術(shù)語

  • Aspect(切面):切入業(yè)務(wù)流程的一個獨立模塊跃闹,在一個應(yīng)用程序可以擁有任意數(shù)量的切面嵌削。如事務(wù)管理毛好,就是切面的一個應(yīng)用例子;
  • Join point(連接點):業(yè)務(wù)流程在運行過程中需要插入切面的具體位置掷贾。如執(zhí)行某個特定方法或者處理異常的時候睛榄;
  • Advice(通知):是切面的具體實現(xiàn)方法∠胨В可分為前置通知(Before)场靴、后置通知(AfterReturning)、異常通知(AfterThrowing)港准、最終通知(After)和環(huán)繞通知(Around)五種旨剥。實現(xiàn)方法具體屬于哪類通知,是在配置文件和注解中指定的浅缸;
  • Pointcut(切入點):用于定義通知應(yīng)該切入到哪些連接點上轨帜,不同的通知通常需要切入到不同的連接點上;
  • Target(目標對象):被一個或者多個切面所通知的對象衩椒;
  • Proxy(代理對象):將通知應(yīng)用到目標對象之后被動態(tài)創(chuàng)建的對象蚌父。可以簡單地理解為毛萌,代理對象為目標對象的業(yè)務(wù)邏輯功能加上被切入的切面所形成的對象苟弛;
  • Weaving(切入):將切面應(yīng)用到目標對象從而創(chuàng)建一個新的代理對象的過程。這個過程可以發(fā)生在編譯期阁将、類裝載期及運行期膏秫。

通知類型

Spring AOP 主要有五種通知類型,分別是前置通知(Before)做盅、后置通知(AfterReturning)缤削、異常通知(AfterThrowing)、最終通知(After)和環(huán)繞通知(Around):

  • Before(前置通知):在連接點之前執(zhí)行的通知吹榴,但這個通知不能阻止連接點之前的執(zhí)行流程(除非它拋出一個異常)亭敢;
  • AfterReturning(后置通知):在連接點正常執(zhí)行完成之后的通知;
  • AfterThrowing(異常通知):在連接點方法拋出異常時執(zhí)行的通知图筹;
  • After(最終通知):在連接點執(zhí)行完成之后的通知(無論是正常完成帅刀,還是拋出異常退出執(zhí)行);
  • Around(環(huán)繞通知):可以在連接點執(zhí)行前后都執(zhí)行的通知婿斥。

AOP 的兩種代理方式

Spring 提供了兩種方式來生成代理對象: JDKProxy 和 Cglib,具體使用哪種方式生成由 AopProxyFactory 根據(jù) AdvisedSupport 對象的配置來決定哨鸭。默認的策略是如果目標類是接口民宿,則使用 JDK 動態(tài)代理技術(shù),否則使用 Cglib 來生成代理像鸡。

JDK 動態(tài)接口代理

JDK 動態(tài)代理主要涉及到 java.lang.reflect 包中的兩個類:Proxy 和 InvocationHandler活鹰。InvocationHandler是一個接口哈恰,通過實現(xiàn)該接口定義橫切邏輯,并通過反射機制調(diào)用目標類的代碼志群,動態(tài)將橫切邏輯和業(yè)務(wù)邏輯編制在一起着绷。Proxy 利用 InvocationHandler 動態(tài)創(chuàng)建一個符合某一接口的實例,生成目標類的代理對象锌云。

CGLib 動態(tài)代理

CGLib 全稱為 Code Generation Library荠医,是一個強大的高性能,高質(zhì)量的代碼生成類庫桑涎,可以在運行期擴展 Java 類與實現(xiàn) Java 接口彬向,CGLib 封裝了 asm,可以再運行期動態(tài)生成新的 class攻冷。和 JDK 動態(tài)代理相比較:JDK 創(chuàng)建代理有一個限制娃胆,就是只能為接口創(chuàng)建代理實例,而對于沒有通過接口定義業(yè)務(wù)方法的類等曼,則可以通過 CGLib 創(chuàng)建動態(tài)代理里烦。

Spring 系列推薦

Spring02——Spring 中 Bean 的生命周期及其作用域

Spring01——你應(yīng)該了解的,有關(guān) IOC 容器的一切

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末禁谦,一起剝皮案震驚了整個濱河市胁黑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枷畏,老刑警劉巖别厘,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拥诡,居然都是意外死亡触趴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搂擦,你說我怎么就攤上這事烁试。” “怎么了榛臼?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我没讲,道長,這世上最難降的妖魔是什么礁苗? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任爬凑,我火速辦了婚禮,結(jié)果婚禮上试伙,老公的妹妹穿的比我還像新娘嘁信。我一直安慰自己于样,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布潘靖。 她就那樣靜靜地躺著穿剖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卦溢。 梳的紋絲不亂的頭發(fā)上糊余,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音既绕,去河邊找鬼啄刹。 笑死,一個胖子當著我的面吹牛凄贩,可吹牛的內(nèi)容都是我干的誓军。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疲扎,長吁一口氣:“原來是場噩夢啊……” “哼昵时!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起椒丧,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤壹甥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后壶熏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體句柠,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年棒假,在試婚紗的時候發(fā)現(xiàn)自己被綠了溯职。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡帽哑,死狀恐怖谜酒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妻枕,我是刑警寧澤僻族,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站屡谐,受9級特大地震影響述么,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愕掏,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一度秘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亭珍,春花似錦敷钾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至众羡,卻和暖如春侨赡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粱侣。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工羊壹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人齐婴。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓油猫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柠偶。 傳聞我的和親對象是個殘疾皇子情妖,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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