程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 第一章 AOP,第一章aop

第一章 AOP,第一章aop

編輯:JAVA綜合教程

第一章 AOP,第一章aop


關於AOP,通常我們會使用AspectJ注解來做,共有6中切面

  • 前置:@Before
  • 後置:@After
  • 返回值:@AfterReturing
  • 異常:@AfterThrowing
  • 環繞:@Around:可以理解為以上四種的集合
  • 引用(不常用)

比較難理解的兩個部分:

  • 連接點:JoinPoint、ProceedJoinPoint
    • 連接點其實就是切面表達式覆蓋的方法,根據該連接點可以獲取多個信息,常用的如下:
      • getSignature():獲取當前方法的返回值、全類名、參數類型,例:Shop com.xxx.firstboot.dao.ShopDao.getShop(int)
      • getTarget():獲取當前方法所屬的類實例,例:com.xxx.firstboot.dao.ShopDao@72f97c4f
      • getArgs():獲取當前方法的參數,例:[Ljava.lang.Object;@6fbd538a
    • JoinPoint習慣性的用在除了@Around中,ProceedJoinPoint習慣性的用在@Around中(因為需要使用ProceedJoinPoint的proceed()方法進行目標方法的執行)
  • 切點表達式:
    • execution(* com.xxx.firstboot.dao.*.*(..))只需要記住這一個就可以
      • 第一個*:代表任意權限和返回類型,例:public Shop,如果需要明確指定,就指定
      • 第二個*:代表這個包下的所有類,例:ShopDao,如果需要明確指定,就指定
      • 第三個*:代表類下的所有方法,例:getShop,如果需要明確指定,就指定
      • ..:代表方法的入參類型可以是任意類型、任意數量(包括0個)的,例:int,如果需要明確指定,就指定
    • 切點表達式就是方法(連接點)的匹配表達式

兩個補充點:

    • 多個切面可以通過@Order(數字)這個注解來制定織入順序,例:@Order(1),數字越小,越先織入,該注解用在切面上(即切面類上)
    • 切點表達式可以重用,如下會演示

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved