淺析Spring AOP(一)——基本概念

什么是AOP?

與OOP對比帝洪,AOP是處理一些橫切行問題。這些橫切性問題不會影響到主邏輯的實現(xiàn)脚猾,但是會散落到代碼的各個部分葱峡,難以維護。AOP就是把這些問題和主業(yè)務邏輯分開龙助,達到與主業(yè)務邏輯解耦的目的砰奕。

傳統(tǒng)OOP是自上而下的邏輯開發(fā);


OOP

AOP是一種面向切面的編程思想提鸟。這些橫切性問題军援,把它們抽象為一個切面,關注點在切面的編程称勋,這就是所謂的AOP胸哥。


AOP關注點是橫切性問題


Spring AOP 簡介

如果說 IoC 是 Spring 的核心,那么面向切面編程就是 Spring 最為重要的功能之一了赡鲜,在數據庫事務中切面編程被廣泛使用空厌。

AOP應用場景:

日志記錄庐船,權限驗證,效率檢查嘲更,事務管理......

學習Spring最好的方式是從spring官方文檔入手.

AOP中的一些基本概念:

必須先知道這些基礎概念筐钟,要不后面看得一臉懵逼。

官網:AOP

官網一開始給出的概念

個人認為理解順序應該為:

Join point:連接點赋朦,例如:servlet中的longin()就是連接點篓冲;所以連接點在spring中它永遠是一個方法。也可以說'目標對象中的方法就是一個連接點‘宠哄。

pointcut:切點纹因,就是連接點的集合!

Weaving:織入:

這個過程叫做織入(Weaving)

Advice:通知琳拨,就字面意思瞭恰,但是有2個部分組成,通知內容和通知到哪里去狱庇。

通知類型:

Before :前置通知惊畏,在連接點方法前調用

After :后置通知,在連接點方法后調用

AfterReturning:返回通知密任,在連接點方法執(zhí)行并正常返回后調用颜启,要求連接點方法在執(zhí)行過程中沒有發(fā)生異常

AfterThrowing:異常通知,當連接點方法異常時調用

Around:環(huán)繞通知浪讳,它將覆蓋原有方法缰盏,但是允許你通過反射調用原有方法,后面會講

Aspect:切面淹遵!包括連接點口猜,切點,通知的一個載體透揣。(如果用AspectJ它就是一個類济炎,如果用springXML的時候它就是一個標簽)并且交給spring管理。

Target object:目標對象辐真,原始對象须尚。

AOP proxy:代理對象, 包含了原始對象的代碼和增強后的代碼的那個對象侍咱。

Introduction:引入耐床,個人理解為實現(xiàn)接口;

代碼驗證為:

@DeclareParents(value="com.vince.dao.*", defaultImpl=IndexDao.class)

public static Dao dao;

com.vince.dao.*下的所有類默認實現(xiàn)了IndexDao.class


概念理解
切點匹配表達式

切點匹配表達式:

execution:可以定義到方法的的最小粒度是參數的返回類型楔脯,修飾符撩轰,包名,類名,方法名钧敞,Spring AOP主要也是使用這個匹配表達式蜡豹。

within:只能定義到類

this:當前生成的代理對象的類型匹配

target:目標對象類型匹配

args:只針對參數

execution和within的區(qū)別:

他們的主要區(qū)別就是粒度,within主要是輔助溉苛,為了健全而存在的镜廉。

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern)?? throws-pattern?)

? 方法的可見性(不寫代表所有)?方法的返回類型? 方法所在類的全路徑名 愚战?方法名類型(方法的參數類型) 方法拋出的異常類型娇唯?

如果看的一臉懵逼....就借助代碼理解一下。

舉個栗子:

本篇只用到注解的方式:

首先引入包:

引入包

代碼:

切面1-1
切面1-2


dao


掃描


測試類

只開啟了beforeWithin()和beforeExecution()這兩個通知

執(zhí)行結果

結果可以看出beforeExecution匹配了2個切入點寂玲,而beforeWithin匹配了全部的切入點塔插。如需測試代碼可以私信。

AOP的內容非常多拓哟,本文主要介紹了SpringAOP的一些基礎概念想许。

參考資料:

感覺寫得超級好:Spring(4)——面向切面編程(AOP模塊)

官網:AOP


本人才疏學淺,以上純屬個人理解断序,如有不對流纹,還望批評指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末违诗,一起剝皮案震驚了整個濱河市漱凝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诸迟,老刑警劉巖茸炒,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阵苇,居然都是意外死亡壁公,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門慎玖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贮尖,“玉大人笛粘,你說我怎么就攤上這事趁怔。” “怎么了薪前?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵润努,是天一觀的道長。 經常有香客問我示括,道長铺浇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任垛膝,我火速辦了婚禮鳍侣,結果婚禮上丁稀,老公的妹妹穿的比我還像新娘。我一直安慰自己倚聚,他們只是感情好线衫,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惑折,像睡著了一般授账。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惨驶,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天白热,我揣著相機與錄音,去河邊找鬼粗卜。 笑死屋确,一個胖子當著我的面吹牛,可吹牛的內容都是我干的续扔。 我是一名探鬼主播乍恐,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼测砂!你這毒婦竟也來了茵烈?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砌些,失蹤者是張志新(化名)和其女友劉穎呜投,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體存璃,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡仑荐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纵东。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粘招。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偎球,靈堂內的尸體忽然破棺而出洒扎,到底是詐尸還是另有隱情,我是刑警寧澤衰絮,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布袍冷,位于F島的核電站,受9級特大地震影響猫牡,放射性物質發(fā)生泄漏胡诗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煌恢。 院中可真熱鬧骇陈,春花似錦、人聲如沸瑰抵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谍憔。三九已至匪蝙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間习贫,已是汗流浹背逛球。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苫昌,地道東北人颤绕。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像祟身,于是被迫代替她去往敵國和親奥务。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容

  • Spring的AOPAOP的基本概念基于注解的“零配置”方式定義切面Bean定義Before增強處理定義After...
    漸丶忘閱讀 1,606評論 0 0
  • 前言 只有光頭才能變強 上一篇已經講解了Spring IOC知識點一網打盡袜硫!氯葬,這篇主要是講解Spring的AOP模...
    Java3y閱讀 6,884評論 8 181
  • 本章內容: 面向切面編程的基本原理 通過POJO創(chuàng)建切面 使用@AspectJ注解 為AspectJ切面注入依賴 ...
    謝隨安閱讀 3,149評論 0 9
  • IoC 容器 Bean 的作用域 自定義作用域實現(xiàn) org.springframework.beans.facto...
    Hsinwong閱讀 2,473評論 0 7
  • ssh的默認端口是22,但是在發(fā)現(xiàn)有人在暴力破解我的root帳號后婉陷,我把它改了帚称,如123456.但是這臺服務器上一...
    pinkong閱讀 984評論 0 0