AOP簡(jiǎn)介

AOP簡(jiǎn)介

在這里向說一件之前生活中比較常見的事情就是抄電表,電表在我們?nèi)粘5纳钪泻艹R姼哿睿挥形覀冇秒娝驮谟涗浳覀冇玫碾娏浚欢螘r(shí)間后就會(huì)有人來抄電表锈颗。在這個(gè)中電表只記錄我們的用電量顷霹,而不用管電量的統(tǒng)計(jì)等。而軟件系統(tǒng)中的一些功能就像電表一樣击吱,這些功能需要用到應(yīng)用程序的多個(gè)地方淋淀,但是我們又不希望在每個(gè)點(diǎn)都明確的調(diào)用她們。比如我們常用的日志覆醇、安全和事務(wù)管理朵纷。如果我們讓應(yīng)用對(duì)象關(guān)注自己的業(yè)務(wù)邏輯,其他方面的都交給其他的對(duì)象來處理永脓,這些會(huì)顯得代碼更加的精簡(jiǎn)袍辞、清晰。

在軟件中這些散布于應(yīng)用中多處的功能被稱為橫切關(guān)注點(diǎn)(日志憨奸、安全等)(cross-cutting concern)革屠。通常來說,這些橫切的關(guān)注點(diǎn)是和應(yīng)用的業(yè)務(wù)邏輯分離的(當(dāng)時(shí)在很多地方是嵌入在應(yīng)用的業(yè)務(wù)邏輯中排宰,而AOP做的就是把這些關(guān)注點(diǎn)和業(yè)務(wù)邏輯分開,那么AOP到底是什么那婉?

AOP是Aspect Oriented Programing的簡(jiǎn)稱板甘,被譯為“面向切面的編程”。按照應(yīng)用程序重構(gòu)的思想详炬,如果多個(gè)類中出現(xiàn)了相同的代碼盐类,那么就應(yīng)該考慮將這些相同的代碼抽象出來定義成一個(gè)父類或者使用委托,但是如果在整個(gè)的應(yīng)用程序中都是用相同的一個(gè)或者幾個(gè)基類呛谜,往往會(huì)導(dǎo)致應(yīng)用程序變得更加復(fù)雜在跳。而面向切面可以替代繼承和委托,而且在很多的場(chǎng)合下可以使程序變得更加的簡(jiǎn)潔隐岛。

AOP

AOP中的一些術(shù)語

和大多數(shù)的技術(shù)一樣猫妙,AOP也有自己的一些術(shù)語。這些術(shù)語用于描述一個(gè)切面聚凹。

  1. 連接點(diǎn)(Joinpoint)

連接點(diǎn)是程序執(zhí)行的某個(gè)特定的位置割坠,如類的初始化前齐帚、類的初始化后、類的某個(gè)方法調(diào)用前彼哼,每個(gè)方法調(diào)用后对妄、方法拋出以上后。一個(gè)類或者一段程序代碼擁有一些具有邊界性質(zhì)的特殊點(diǎn)敢朱。

  1. 切點(diǎn)(Pointcut)

每個(gè)程序都擁有多個(gè)連接點(diǎn)剪菱,如一個(gè)擁有兩個(gè)方法的類,這兩個(gè)方法都是連接點(diǎn)拴签,即連接點(diǎn)是程序類中客觀存在的事物孝常。簡(jiǎn)單的來說也就是連接點(diǎn)都是可以切入的點(diǎn),每一次我們可以選擇一些特點(diǎn)的連接點(diǎn)切入篓吁,而我們所選的這些連接點(diǎn)就是切點(diǎn)茫因。可以通過數(shù)據(jù)庫的查詢來理解切點(diǎn)和連接點(diǎn)之間的關(guān)系:連接點(diǎn)相當(dāng)于數(shù)據(jù)庫中的記錄(也就是所有能夠連接的點(diǎn))杖剪,而切點(diǎn)相當(dāng)與查詢條件冻押。切點(diǎn)和連接點(diǎn)不是一一對(duì)應(yīng)的關(guān)系,一個(gè)切點(diǎn)可以匹配多個(gè)連接點(diǎn)盛嘿。

  1. 增強(qiáng)(Advice)

增強(qiáng)是織入連接點(diǎn)上的一段程序洛巢。向記錄日志等,我們可以在應(yīng)用程序邏輯方法完成后次兆,去增強(qiáng)這個(gè)方法稿茉,也就是選擇這個(gè)類的這個(gè)方法作為切點(diǎn),去織入一段程序記錄日志芥炭。相當(dāng)于動(dòng)態(tài)的封裝這個(gè)方法漓库。

  1. 目標(biāo)對(duì)象

增強(qiáng)邏輯的織入目標(biāo)類。如果沒有AOP园蝠,那么目標(biāo)業(yè)務(wù)類需要自己實(shí)現(xiàn)所有的邏輯渺蒿。

  1. 引介(Introduction)

引介是一種特殊的增強(qiáng),她為類添加一些屬性方法彪薛。這樣茂装,及時(shí)一個(gè)業(yè)務(wù)類原本沒有實(shí)現(xiàn)某個(gè)接口,通過AOP的引介功能善延,也可以動(dòng)態(tài)地為該業(yè)務(wù)類添加接口實(shí)現(xiàn)邏輯少态。

  1. 織入(Weaving)

織入是將增強(qiáng)添加到目標(biāo)類的具體連接點(diǎn)上的過程。從名字上也可以看出易遣,AOP就像織布機(jī)一樣彼妻,將目標(biāo)類,增強(qiáng)編制在一起训挡。根據(jù)不同的實(shí)現(xiàn)技術(shù)澳骤,AOP有三種織入方式歧强。

(1)編譯期織入:切面在目標(biāo)類編譯時(shí)被織入,這要求需用使用特殊的Java編譯器为肮。

(2)類裝載期被織入:切面在目標(biāo)類加載到JVM時(shí)被織入摊册,這種方式需要特殊的類加載器(ClassLoader),它可以在目標(biāo)類引入應(yīng)用之前增強(qiáng)該目標(biāo)類的字節(jié)碼颊艳。

(3)動(dòng)態(tài)代理織入茅特,在運(yùn)行期為目標(biāo)類添加增強(qiáng)生成子類的方式。

Spring采用動(dòng)態(tài)代理織入棋枕,AspectJ采用編譯器織入和類裝載期織入白修。

  1. 代理(Proxy)

一個(gè)類別AOP增強(qiáng)之后,就會(huì)產(chǎn)生一個(gè)新的類重斑,他是如何了袁磊和增強(qiáng)邏輯的代理類兵睛。根據(jù)不同的代理方式,代理類既可以和原類具有相同接口的類窥浪,也可能就是原來的類祖很,所以可以采用和調(diào)用原類相同的方式調(diào)用代理類。

  1. 切面(Aspect)

切面有切點(diǎn)和增強(qiáng)(引介)組成漾脂,它既包括了橫切邏輯的定義假颇,也包括連接點(diǎn)的定義。

AOP的實(shí)現(xiàn)者

  1. AspectJ

AspectJ是一個(gè)面向切面的框架骨稿,2001年有Xerox PARC的AOP小組發(fā)布笨鸡,它擴(kuò)展了Java語言。AspectJ定義了AOP語法坦冠,所以它有一個(gè)專門的編譯器用來生成遵守Java字節(jié)編碼規(guī)范的Class文件形耗。

  1. AspectWerkz

AspectWerkz是基于Java的簡(jiǎn)單、動(dòng)態(tài)辙浑、輕量級(jí)的AOP框架趟脂,該框架發(fā)布于2002年,有BEA Systems提供支持例衍。它支持運(yùn)行期或類裝載期織入橫切代碼,它也有一個(gè)特殊的類裝載器∫研叮現(xiàn)在AspectJ和AspectWerkz項(xiàng)目已經(jīng)合并佛玄,它們合作的第一個(gè)發(fā)布版是AspectJ 5:擴(kuò)展AspectJ語言,以注解的方式支持類似AspectJ的代碼風(fēng)格累澡。

  1. Jboss AOP

JBoss AOP于2004年作為JBoss應(yīng)用服務(wù)器框架的擴(kuò)展功能發(fā)布梦抢。

  1. Spring AOP

Spring AOP使用純Java實(shí)現(xiàn),他不需要專門的編譯過程愧哟,也不需要特殊的類裝載器奥吩,他在運(yùn)行期通過代理方式向目標(biāo)類中織入增強(qiáng)代碼哼蛆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市霞赫,隨后出現(xiàn)的幾起案子腮介,更是在濱河造成了極大的恐慌,老刑警劉巖端衰,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叠洗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡旅东,警方通過查閱死者的電腦和手機(jī)灭抑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抵代,“玉大人腾节,你說我怎么就攤上這事』珉梗” “怎么了案腺?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)参淫。 經(jīng)常有香客問我救湖,道長(zhǎng),這世上最難降的妖魔是什么涎才? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任鞋既,我火速辦了婚禮,結(jié)果婚禮上耍铜,老公的妹妹穿的比我還像新娘邑闺。我一直安慰自己,他們只是感情好棕兼,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布陡舅。 她就那樣靜靜地躺著,像睡著了一般伴挚。 火紅的嫁衣襯著肌膚如雪靶衍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天茎芋,我揣著相機(jī)與錄音颅眶,去河邊找鬼。 笑死田弥,一個(gè)胖子當(dāng)著我的面吹牛涛酗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼商叹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼燕刻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剖笙,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤卵洗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后枯途,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忌怎,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年酪夷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榴啸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晚岭,死狀恐怖鸥印,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坦报,我是刑警寧澤库说,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站片择,受9級(jí)特大地震影響潜的,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜字管,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一啰挪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘲叔,春花似錦亡呵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丁逝,卻和暖如春汁胆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霜幼。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工沦泌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辛掠。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親萝衩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子回挽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

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

  • 本章內(nèi)容: 面向切面編程的基本原理 通過POJO創(chuàng)建切面 使用@AspectJ注解 為AspectJ切面注入依賴 ...
    謝隨安閱讀 3,158評(píng)論 0 9
  • AOP實(shí)現(xiàn)可分為兩類(按AOP框架修改源代碼的時(shí)機(jī)): 靜態(tài)AOP實(shí)現(xiàn):AOP框架在編譯階段對(duì)程序進(jìn)行修改千劈,即實(shí)現(xiàn)...
    數(shù)獨(dú)題閱讀 2,324評(píng)論 0 22
  • 我討厭牙齒,每當(dāng)真實(shí)之聲要發(fā)出來牌捷,它總是關(guān)緊不開墙牌。我總是面帶微笑,總是躬腰卑謙暗甥,小心揣測(cè)著人的心思喜滨,隨著那些心上上...
    常非常K閱讀 513評(píng)論 0 2
  • 27歲,感覺好遠(yuǎn)撤防,好希望明天就可以到來虽风! 從小,不知道從什么時(shí)候開始寄月,27歲開始成為我每天的盼望辜膝,尤其是在傷心欲絕...
    喜歡你是不將就閱讀 173評(píng)論 0 0
  • 花賢花島樂悠悠厂抖, 開荒夜歸一扁舟。 半壺米酒不知醉克懊, 畝畝花圃絕非偶忱辅。 ··· 冬樹枯枝未曾朽, 寒鴉幾啼遷南州保檐。...
    one_mighty閱讀 262評(píng)論 0 0