SpringAOP

一. AOP定義

AOP指在程序運行期間動態(tài)的將某段代碼切入到指定方法指定位置運行的編程方式。

二. AOP流程

  1. 導入aop模塊:Spring AOP(spring-aspects)

  2. 定義一個業(yè)務(wù)邏輯類(MathCalculator):在業(yè)務(wù)邏輯運行的時候?qū)⑷罩具M行打印(方法之前、方法運行結(jié)束、方法出現(xiàn)異常嘉冒、xxxx)

  3. 定義一個日志切面類(LogAspects):切面類里面的方法需要動態(tài)感知MathCalculator.div 運行到哪里然后執(zhí)行:
    通知方法:

    • 前置通知(@Before):logStart:在目標方法(div)運行之前運行
    • 后置通知(@After):logEnd:在目標方法(div)運行結(jié)束之后運行(無論方法正常結(jié)束還是異常結(jié)束)
    • 返回通知(@AfterReturning):logReturn:在目標方法(div)正常返回之后運行
    • 異常通知(@AfterThrowing):logException:在目標方法(div)出現(xiàn)異常以后運行。
    • 環(huán)繞通知(@Around):動態(tài)代理,手動推進目標方法運行(joinPoint.procced())
  4. 給切面類的目標方法標注何時何地運行(通知注解)

  5. 將切面類和業(yè)務(wù)邏輯類(目標方法所在類)都加入到容器中亮垫;

6.必須告訴spring哪個類是切面類(給切面類加一個注解@Aspect)

7、給配置類中加 @EnableAspectJAutoProxy 【開啟基于注解的aop模式】在Spring中很多的@EnableXXX;

三步:
1)伟骨、將業(yè)務(wù)邏輯組件和切面類都加入到容器中饮潦;告訴spring哪個是切面類(@Aspect)

2)、在切面類上的每一個通知方法上標注通知注解携狭,告訴spring何時何地運行(切入點表達式)

3)继蜡、開啟基于注解的aop模式:@EnableAspectJAutoProxy

MainConfigOfAOP.java

@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
     
    //業(yè)務(wù)邏輯類加入容器中
    @Bean
    public MathCalculator calculator(){
        return new MathCalculator();
    }

    //切面類加入到容器中
    @Bean
    public LogAspects logAspects(){
        return new LogAspects();
    }
}

MathCalculator.java

public class MathCalculator {
    
    public int div(int i,int j){
        System.out.println("MathCalculator...div...");
        return i/j; 
    }

}

LogAspects.java

/**
 * 切面類
 * 
 * @Aspect: 告訴Spring當前類是一個切面類
 *
 */
@Aspect
public class LogAspects {
    
    //抽取公共的切入點表達式
    //1、本類引用
    //2逛腿、其他的切面引用
    @Pointcut("execution(public int com.atguigu.aop.MathCalculator.*(..))")
    public void pointCut(){};
    
    //@Before在目標方法之前切入稀并;切入點表達式(指定在哪個方法切入)
    @Before("pointCut()")
    public void logStart(JoinPoint joinPoint){
        Object[] args = joinPoint.getArgs();
        System.out.println(""+joinPoint.getSignature().getName()+"運行。单默。碘举。@Before:參數(shù)列表是:{"+Arrays.asList(args)+"}");
    }
    
    @After("com.atguigu.aop.LogAspects.pointCut()")
    public void logEnd(JoinPoint joinPoint){
        System.out.println(""+joinPoint.getSignature().getName()+"結(jié)束。搁廓。引颈。@After");
    }
    
    //JoinPoint一定要出現(xiàn)在參數(shù)表的第一位
    @AfterReturning(value="pointCut()",returning="result")
    public void logReturn(JoinPoint joinPoint,Object result){
        System.out.println(""+joinPoint.getSignature().getName()+"正常返回。枚抵。线欲。@AfterReturning:運行結(jié)果:{"+result+"}");
    }
    
    @AfterThrowing(value="pointCut()",throwing="exception")
    public void logException(JoinPoint joinPoint,Exception exception){
        System.out.println(""+joinPoint.getSignature().getName()+"異常。汽摹。李丰。異常信息:{"+exception+"}");
    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逼泣,隨后出現(xiàn)的幾起案子趴泌,更是在濱河造成了極大的恐慌,老刑警劉巖拉庶,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗜憔,死亡現(xiàn)場離奇詭異,居然都是意外死亡氏仗,警方通過查閱死者的電腦和手機愈案,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來和蚪,“玉大人,你說我怎么就攤上這事币励。” “怎么了珊拼?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵食呻,是天一觀的道長。 經(jīng)常有香客問我澎现,道長仅胞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任剑辫,我火速辦了婚禮干旧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揭斧。我一直安慰自己莱革,他們只是感情好峻堰,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布讹开。 她就那樣靜靜地躺著,像睡著了一般捐名。 火紅的嫁衣襯著肌膚如雪旦万。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天镶蹋,我揣著相機與錄音成艘,去河邊找鬼。 笑死贺归,一個胖子當著我的面吹牛淆两,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拂酣,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼秋冰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了婶熬?” 一聲冷哼從身側(cè)響起剑勾,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赵颅,沒想到半個月后虽另,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡饺谬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年捂刺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡族展,死狀恐怖芝发,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苛谷,我是刑警寧澤辅鲸,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站腹殿,受9級特大地震影響独悴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锣尉,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一刻炒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧自沧,春花似錦坟奥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孝偎,卻和暖如春访敌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衣盾。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工寺旺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人势决。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓阻塑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親果复。 傳聞我的和親對象是個殘疾皇子陈莽,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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

  • SpringAOP 博客鏈接 本文主要是解析Spring AOP的運作流程。上次講到Java中的兩種動態(tài)代理技術(shù):...
    spilledyear閱讀 1,702評論 2 32
  • SpringAOP-PPT SpringAOP視頻 面向切面編程(AOP)通過提供另外一種思考程序結(jié)構(gòu)的途經(jīng)來彌補...
    Grasse閱讀 329評論 0 0
  • springAop:面向切面的編程 應(yīng)用場景:權(quán)限控制据悔、事物管理传透、日志打印等等,就是在不同的方法中重復用到相同的代...
    HJJ_3c00閱讀 334評論 0 0
  • IoC 容器 Bean 的作用域 自定義作用域?qū)崿F(xiàn) org.springframework.beans.facto...
    Hsinwong閱讀 2,476評論 0 7
  • #白馬聲慢极颓,我自手書#第一章 新生 周圍漆黑一片朱盐,什么也沒有,什么也看不見菠隆。突然遠處出現(xiàn)一個星點的亮光兵琳,這...
    zzx會計閱讀 312評論 0 0