国产日产欧产精品网站|2022仙踪林官网老狼信息|天天澡天天揉揉Av在线|国产精品成人久久久久久久

Spring框架

5.2.2 JoinPoint

5.3通知

5.3.1 概述

  • 在具體的連接點上要執行的操作。
  • 一個切面可以包括一個或者多個通知。
  • 通知所使用的注解的值往往是切入點表達式。

5.3.2?? 前置通知

  • 前置通知:在方法執行之前執行的通知
  • 使用@Before注解

5.3.3后置通知

  • 后置通知:后置通知是在連接點完成之后執行的,即連接點返回結果或者拋出異常的時候
  • 使用@After注解

5.3.4返回通知

  • 返回通知:無論連接點是正常返回還是拋出異常,后置通知都會執行。如果只想在連接點返回的時候記錄日志,應使用返回通知代替后置通知。
  • 使用@AfterReturning注解,在返回通知中訪問連接點的返回值

???????? ①在返回通知中,只要將returning屬性添加到@AfterReturning注解中,就可以訪問連接點的返回值。該屬性的值即為用來傳入返回值的參數名稱

???????? ②必須在通知方法的簽名中添加一個同名參數。在運行時Spring AOP會通過這個參數傳遞返回值

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

 

5.3.5異常通知

  • 異常通知:只在連接點拋出異常時才執行異常通知
  • 將throwing屬性添加到@AfterThrowing注解中,也可以訪問連接點拋出的異常。Throwable是所有錯誤和異常類的頂級父類,所以在異常通知方法可以捕獲到任何錯誤和異常。
  • 如果只對某種特殊的異常類型感興趣,可以將參數聲明為其他異常的參數類型。然后通知就只在拋出這個類型及其子類的異常時才被執行

 

5.3.6環繞通知

  • 環繞通知是所有通知類型中功能最為強大的,能夠全面地控制連接點,甚至可以控制是否執行連接點。
  • 對于環繞通知來說,連接點的參數類型必須是ProceedingJoinPoint。它是 JoinPoint的子接口,允許控制何時執行,是否執行連接點。
  • 在環繞通知中需要明確調用ProceedingJoinPoint的proceed()方法來執行被代理的方法。如果忘記這樣做就會導致通知被執行了,但目標方法沒有被執行。
  • 注意:環繞通知的方法需要返回目標方法執行之后的結果,即調用proceed();的返回值,否則會出現空指針異常。

 

5.4 重用切入點定義

  • 在編寫AspectJ切面時,可以直接在通知注解中書寫切入點表達式。但同一個切點表達式可能會在多個通知中重復出現。
  • 在AspectJ切面中,可以通過@Pointcut注解將一個切入點聲明成簡單的方法。切入點的方法體通常是空的,因為將切入點定義與應用程序邏輯混在一起是不合理的。
  • 切入點方法的訪問控制符同時也控制著這個切入點的可見性。如果切入點要在多個切面中共用,最好將它們集中在一個公共的類中。在這種情況下,它們必須被聲明為public。在引入這個切入點時,必須將類名也包括在內。如果類沒有與這個切面放在同一個包中,還必須包含包名。
  • 其他通知可以通過方法名稱引入該切入點

5.4???? 指定切面的優先級

  • 在同一個連接點上應用不止一個切面時,除非明確指定,否則它們的優先級是不確定的。
  • 切面的優先級可以通過實現Ordered接口或利用@Order注解指定。
  • 實現Ordered接口,getOrder()方法的返回值越小,優先級越高。
  • 若使用@Order注解,序號出現在注解中

 

 

 

塔河县| 大洼县| 文昌市| 台东县| 江孜县| 北京市| 曲松县| 汉川市| 海伦市| 乌兰县| 汝阳县| 临汾市| 沅陵县| 永宁县| 新干县| 北辰区| 万盛区| 新绛县| 松江区| 剑河县| 南宫市| 肇东市| 高密市| 台东县| 巴马| 绍兴市| 乐业县| 加查县| 阿克苏市| 顺义区| 屏东县| 邻水| 商水县| 新邵县| 海安县| 通州市| 延边| 涟源市| 西城区| 沐川县| 永定县|