天天看點

(III)AOP:第六節:通知

        (1)在具體的連接配接點上要執行的操作;

        (2)一個切面可以包括一個或者多個通知;

        (3)通知所使用的注解的值往往是切入點表達式;

  (1)前置通知:在方法執行之前執行的通知;

  (2)使用 @before 注解

  (1)後置通知:後置通知是在連接配接點完成之後執行的,即連接配接點傳回結果或者抛出異常的時候;

  (2)使用 @after 注解;

  (1)傳回通知:無論連接配接點是正常傳回還是抛出異常,後置通知都會執行。如果隻想在連接配接點傳回的時候記錄日志,應使用傳回通知代替後置通知;

  (2)使用 @afterreturning 注解,在傳回通知中通路連接配接點的傳回值;

    ① 在傳回通知中,隻要将 returning 屬性添加到 @afterreturning 注解中,就可以通路連接配接點的傳回值,該屬性的值即為用來傳入傳回值的參數名稱;

      returning屬性:告訴spring使用什麼變量來接結果傳回值

     ② 必須在通知方法的簽名中添加一個同名參數,在運作時 spring aop 會通過這個參數傳遞傳回值;

     ③ 原始的切點表達式需要出現在 pointcut 屬性中;

  (1)異常通知:隻在連接配接點抛出異常時才執行異常通知;        

  (2)将 throwing 屬性添加到 @afterthrowing 注解中,也可以通路連接配接點抛出的異常。

      throwing:告訴spring使用什麼變量來接結果異常資訊

                 throwable 是所有錯誤和異常類的頂級父類,是以在異常通知方法可以捕獲到任何錯誤和異常。

        (3)如果隻對某種特殊的異常類型感興趣,可以将參數聲明為其他異常的參數類型,然後通知就隻在抛出這個類型及其子類的異常時才被執行;

  spring對通知方法的要求不嚴格:修改傳回值和去掉靜态static都照樣運作

  但唯一有要求的是方法的參數清單一定不能亂寫 原因:通知方法是spring利用反射調用的,每次調用方法都需要确定這個方法的參數表的值; 參數表上的每一個參數,spring都得知道是什麼。

  舉例:

  對于有異常和傳回值的方法,指定的異常、結果傳回值一定要寫大:

  

  不然他隻接收,你寫的異常和傳回值類型如:隻接受空指針異常和integer類型

  通知方法的執行順序: