AOP入門

最近在看《Spring揭秘》里面AOP部分吼拥,利用最近兩三天的上班空余時間來簡單總結(jié)一下吧坑雅。

  1. AOP是什么
  1. AOP的實現(xiàn)
  2. AOP在Java上的實現(xiàn)
  3. AOP織入器

AOP是什么翠订?

AOP全稱"Aspect-Oriented Programming"婚夫,意為面向切面編程疗疟。使用AOP,我們可以對類似于Logging和Security等系統(tǒng)需求進(jìn)行模塊化的組織住练,簡化系統(tǒng)需求與實現(xiàn)之間的對比關(guān)系地啰,進(jìn)而使得整個系統(tǒng)的實現(xiàn)更具有模塊化

所以說,個人理解AOP其實算一種開發(fā)思想讲逛,在我們的軟件開發(fā)中亏吝,通過引入所謂切面的概念來將日志記錄,權(quán)限控制等一些與業(yè)務(wù)邏輯關(guān)系不算太大的其他邏輯操作隔離開盏混,從而使得業(yè)務(wù)邏輯和其余的邏輯各自能夠更好地被組織蔚鸥,維護(hù),更具有模塊化许赃。

AOP的實現(xiàn)

AOL

AOP是一種理念止喷,需要一種方式來實現(xiàn)該理念。那么實現(xiàn)AOP的語言就成為AOL混聊,即Aspect-Oriented Language弹谁。那么AOP都有哪些語言實現(xiàn)方式呢?

  • AspectJ(Java)
  • AspectC
  • AspectC++
  • Aspect.Net
  • AspectL(Lisp)
  • AspectPHP

基本實現(xiàn)原理

  1. 靜態(tài)AOP

以AspectJ為代表,將實現(xiàn)后的Aspect編譯并織入到系統(tǒng)的靜態(tài)類中预愤。比如沟于,AspectJ會使用ajc編譯器將各個Aspect以java字節(jié)碼的形式編譯到系統(tǒng)的各個功能模塊中,以達(dá)到融合Aspect和Class的目的鳖粟。

靜態(tài)AOP的優(yōu)點:

Aspect直接以Java字節(jié)碼的形式編譯到Java類中社裆,Java虛擬機(jī)可以像通常一樣加載Java類運(yùn)行,不會對整個系統(tǒng)的運(yùn)行造成任何的性能損失向图。

缺點:

靈活性不夠泳秀。如果切點需要個改變,則需要重新修改代碼榄攀,重新編譯織入到系統(tǒng)中嗜傅。

  1. 動態(tài)AOP

動態(tài)AOP的織入過程在系統(tǒng)運(yùn)行開始之后進(jìn)行,而不是預(yù)先編譯到系統(tǒng)類中檩赢,而且織入的信息大都采用外部XML文件格式保存吕嘀,可以在調(diào)整織入點以及織入邏輯單元的同時,不必變更系統(tǒng)其他模塊贞瞒,甚至在系統(tǒng)運(yùn)行的時候偶房,也可以動態(tài)地更改織入邏輯。

動態(tài)AOP的代表有JBoss AOP军浆、Spring AOP等框架棕洋。

AOP在Java上的實現(xiàn)

1. 動態(tài)代理

2. 動態(tài)字節(jié)碼增強(qiáng)

3. 自定義類加載器

4. Java代碼生成

5. AOL擴(kuò)展

AOP中的關(guān)鍵字

  • Joinpoint: 代表要織入到系統(tǒng)中的執(zhí)行點。

    常見的織入點有: 方法調(diào)用乒融、方法執(zhí)行掰盘、構(gòu)造方法調(diào)用、構(gòu)造方法執(zhí)行赞季、字段設(shè)置愧捕、字段獲取、異常處理執(zhí)行申钩、類初始化(靜態(tài)類型次绘、靜態(tài)塊)。

  • PointCut: 代表的是Joinpoint的表述方式撒遣,描述要在哪些地方進(jìn)行Joinpoint的織入断盛。

    PointCut的表述方式有哪些: 正則表達(dá)式(普遍用法)、直接指定Joinpoint所在方法名稱愉舔、使用特定的PointCut表達(dá)語言。

  • Advice: 代表將會織入到Joinpoint的橫切邏輯伙菜。

Advice在Joinpoint位置執(zhí)行時機(jī)的差異或者完成功能的不同轩缤,可以分為多種具體形式:Before Advice、After Adivce、After returning Advice火的、After throwing Advice壶愤、After Finally Advice、Around Advice馏鹤、Introduction征椒。

  • Aspect: 代表對系統(tǒng)中的橫切關(guān)注點邏輯進(jìn)行模塊化封裝的AOP實體概念

AOP織入器

需要將我們之前定義好的那些橫切邏輯織入到原來的業(yè)務(wù)代碼中,就需要用到一個叫織入器的東西

常見織入器有:

  • AspectJ 技術(shù)的ajc織入器
  • JBoss AOP 采用自定義類加載器作為織入器來完成織入
  • Spring AOP 將ProxyFactory作為 織入器來完成織入
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末湃累,一起剝皮案震驚了整個濱河市勃救,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌治力,老刑警劉巖蒙秒,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宵统,居然都是意外死亡晕讲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門马澈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓢省,“玉大人,你說我怎么就攤上這事痊班∏诨椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵辩块,是天一觀的道長蛔六。 經(jīng)常有香客問我,道長废亭,這世上最難降的妖魔是什么国章? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮豆村,結(jié)果婚禮上液兽,老公的妹妹穿的比我還像新娘。我一直安慰自己掌动,他們只是感情好四啰,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粗恢,像睡著了一般柑晒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眷射,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天匙赞,我揣著相機(jī)與錄音佛掖,去河邊找鬼。 笑死涌庭,一個胖子當(dāng)著我的面吹牛芥被,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坐榆,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拴魄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了席镀?” 一聲冷哼從身側(cè)響起匹中,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愉昆,沒想到半個月后职员,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跛溉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年焊切,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芳室。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡专肪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堪侯,到底是詐尸還是另有隱情嚎尤,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布伍宦,位于F島的核電站芽死,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏次洼。R本人自食惡果不足惜关贵,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卖毁。 院中可真熱鬧揖曾,春花似錦、人聲如沸亥啦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翔脱。三九已至奴拦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間届吁,已是汗流浹背粱坤。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工隶糕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人站玄。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像濒旦,于是被迫代替她去往敵國和親株旷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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