AspectJ(一) 一些該了解的概念

AspectJ 一些該了解的概念

AspectJ就是AOP,只不過是面向java的嚎莉。AOP里面有一些重要基本的概念

什么是AOP

AOP是Aspect Oriented Programming的縮寫,即『面向切面編程』动壤。它和我們平時接觸到的OOP都是編程的不同思想萝喘,OOP,即『面向?qū)ο缶幊獭磺戆茫岢氖菍⒐δ苣K化阁簸,對象化,而AOP的思想哼丈,則不太一樣启妹,它提倡的是針對同一類問題的統(tǒng)一處理,當(dāng)然醉旦,我們在實際編程過程中饶米,不可能單純的安裝AOP或者OOP的思想來編程桨啃,很多時候,可能會混合多種編程思想檬输,大家也不必要糾結(jié)該使用哪種思想照瘾,取百家之長,才是正道丧慈。
那么AOP這種編程思想有什么用呢析命,一般來說粘我,主要用于不想侵入原有代碼的場景中蔫缸,例如SDK需要無侵入的在宿主中插入一些代碼存璃,做日志埋點距境、性能監(jiān)控、動態(tài)權(quán)限控制赔嚎、甚至是代碼調(diào)試等等现喳。

Aspect (切面)

實現(xiàn)了cross-cutting功能怔接,是針對切面的模塊吟税。最常見的是logging模塊凹耙、方法執(zhí)行耗時模塊,這樣乌妙,程序按功能被分為好幾層使兔,如果按傳統(tǒng)的繼承的話,商業(yè)模型繼承日志模塊的話需要插入修改的地方太多藤韵,而通過創(chuàng)建一個切面就可以使用AOP來實現(xiàn)相同的功能了,我們可以針對不同的需求做出不同的切面熊经。

jointpoint(連接點)

連接點是切面插入應(yīng)用程序的地方泽艘,該點能被方法調(diào)用,而且也會被拋出意外镐依。連接點是應(yīng)用程序提供給切面插入的地方匹涮,在插入地建立AspectJ程序與源程序的連接。例如槐壳,構(gòu)造方法調(diào)用然低、調(diào)用方法、方法執(zhí)行务唐、異常等等雳攘,這些都是Join Points,實際上枫笛,也就是你想把新的代碼插在程序的哪個地方吨灭,是插在構(gòu)造方法中,還是插在某個方法調(diào)用前刑巧,或者是插在某個方法中喧兄,這個地方就是Join Points

jointpoint

pointcut(切點)

pointcut可以控制你把哪些advice應(yīng)用于jointpoint上去无畔,通常你使用pointcuts通過正則表達式來把明顯的名字和模式進行匹配應(yīng)用。決定了那個jointpoint會獲得通知吠冤。分為call浑彰、execution、target拯辙、this闸昨、within等關(guān)鍵字。與joinPoint相比薄风,pointcut就是一個具體的切點(需要插入代碼的地方)

advice(處理邏輯)

advice是我們切面功能的實現(xiàn)饵较,它是切點的真正執(zhí)行的地方。比如像寫日志到一個文件中遭赂,advice(包括:before循诉、after、around等)在jointpoint處插入代碼到應(yīng)用程序中撇他。我們來看一看原AspectJ程序和反編譯過后的程序茄猫。看完下面的圖我們就大概明白了AspectJ是如何達到監(jiān)控源程序的信息了困肩。

舉個例子

@Before("execution(* android.app.Activity.on**(..))")
   public void onActivityMethodBefore(JoinPoint joinPoint) throws Throwable {
}
  • @Before 這是一個advice
  • execution 這是一個Join Point
  • (* android.app.Activity.on**(..)" 這是一個正則表達式
    • 第一個*表示返回值(任意類型) - 方法的路徑(通過正則匹配) - ()表示方法的參數(shù)划纽,可以指定類型
  • onActivityMethodBefore 表示切入點的方法

Method 參數(shù)規(guī)則

表達式 含義
java.lang.String 匹配String類型
java.*.String 匹配java包下的任何“一級子包”下的String類型,如匹配java.lang.String锌畸,但不匹配java.lang.ss.String
java..* 匹配java包及任何子包下的任何類型,如匹配java.lang.String勇劣、java.lang.annotation.Annotation
java.lang.*ing 匹配任何java.lang包下的以ing結(jié)尾的類型
java.lang.Number+ 匹配java.lang包下的任何Number的自類型,如匹配java.lang.Integer潭枣,也匹配java.math.BigInteger
參數(shù) 含義
() 表示方法沒有任何參數(shù)
(..) 表示匹配接受任意個參數(shù)的方法
(..,java.lang.String) 表示匹配接受java.lang.String類型的參數(shù)結(jié)束比默,且其前邊可以接受有任意個參數(shù)的方法
(java.lang.String,..) 表示匹配接受java.lang.String類型的參數(shù)開始,且其后邊可以接受任意個參數(shù)的方法
(*,java.lang.String) 表示匹配接受java.lang.String類型的參數(shù)結(jié)束盆犁,且其前邊接受有一個任意類型參數(shù)的方法

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末命咐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谐岁,更是在濱河造成了極大的恐慌醋奠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伊佃,死亡現(xiàn)場離奇詭異窜司,居然都是意外死亡,警方通過查閱死者的電腦和手機锭魔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門例证,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迷捧,你說我怎么就攤上這事织咧≌痛校” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵笙蒙,是天一觀的道長抵屿。 經(jīng)常有香客問我,道長捅位,這世上最難降的妖魔是什么轧葛? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮艇搀,結(jié)果婚禮上尿扯,老公的妹妹穿的比我還像新娘。我一直安慰自己焰雕,他們只是感情好衷笋,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矩屁,像睡著了一般辟宗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吝秕,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天泊脐,我揣著相機與錄音,去河邊找鬼烁峭。 笑死容客,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的则剃。 我是一名探鬼主播耘柱,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棍现!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起镜遣,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤己肮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后悲关,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谎僻,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年寓辱,在試婚紗的時候發(fā)現(xiàn)自己被綠了艘绍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秫筏,死狀恐怖诱鞠,靈堂內(nèi)的尸體忽然破棺而出挎挖,到底是詐尸還是另有隱情,我是刑警寧澤航夺,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布蕉朵,位于F島的核電站,受9級特大地震影響阳掐,放射性物質(zhì)發(fā)生泄漏始衅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一缭保、第九天 我趴在偏房一處隱蔽的房頂上張望汛闸。 院中可真熱鬧,春花似錦艺骂、人聲如沸诸老。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孕锄。三九已至,卻和暖如春苞尝,著一層夾襖步出監(jiān)牢的瞬間畸肆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工宙址, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留轴脐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓抡砂,卻偏偏與公主長得像大咱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子注益,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

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

  • 本章內(nèi)容: 面向切面編程的基本原理 通過POJO創(chuàng)建切面 使用@AspectJ注解 為AspectJ切面注入依賴 ...
    謝隨安閱讀 3,146評論 0 9
  • 基本知識 其實, 接觸了這么久的 AOP, 我感覺, AOP 給人難以理解的一個關(guān)鍵點是它的概念比較多, 而且坑爹...
    永順閱讀 8,189評論 5 114
  • 看AspectJ在Android中的強勢插入 什么是AOP AOP是Aspect Oriented Program...
    eclipse_xu閱讀 11,635評論 11 84
  • 愛不是一個人的訴求丑搔,而是兩個人的相互給予厦瓢,也許是在自己的世界里愛的太多,也就想得更多啤月,想要做到平靜那確實需要多大修...
    空杯悟閱讀 145評論 0 0
  • “人越懂事谎仲,也沒人心疼” 記得小的時候聽過外婆講過這句話浙垫,那時候,大人們總是對我說“你怎么這么不懂事”,大家明明都...
    淺殤HURT閱讀 632評論 0 0