Spring針對AOP詳細講解

什麼是Spring AOP

  • AOP是面向切面編程。OOP是面向對象編程,AOP是一種思想,它是針對程序中的某一類的功能做統一的處理。比如用戶登錄權限的校驗,沒學AOP之前,我們所有需要判斷用戶登錄的頁面,AOP可以自動幫我們實現登錄驗證,不再需要每個方法中都寫相同的用戶登錄的驗證瞭。
  • Spring AOP是一種框架,提供瞭一種對AOP 思想的實現,他們的關系和IoC與DI類似。
  • 利用AOP可以對各個業務進行隔離, 從而是得業務各邏輯之間的耦合性降低, 提高瞭程序的可重用性, 同時提高開發效率

為什麼要用AOP?

  • 之前處理用戶登錄的狀態驗證,每個Controller都要寫一遍用戶登錄,然而當你的功能越來越多的時候,你要寫的登錄驗證也越來越多,而這些方法都是相同的,對於這種功能統一,且使用的地方較多的功能,就可以考慮AOP來統一處理
  • 除瞭統一的用戶登錄的判斷之外,AOP還可以實現:統一日志記錄,統一方法執行時間的統計,統一的返回格式設置,統一的異常處理,事務的開啟和提交

AOP的組成

  • 切面:切面由切點和通知組成,針對於某一個功能的具體定義(相當於一個類),某一個功能可能是登錄驗證功能(一個AOP一個數據庫),也可能是日志記錄功能,一個功能對應一個切面。
  • 切點:切點是切面中的某一個方法,用戶登錄驗證方法就是一個切點。
  • 連接點:調用這些切點(方法)的頁面就是連接點
  • 通知: 切點是一個空方法,通知是具體實現瞭這個方法,通知相當於切點的方法體。通知包括:前置通知,後置通知,返回之後通知,拋異常後的通知,環繞通知

Spring AOP的實現

  • 添加Spring AOP框架支持
  • 定義切面和切點
  • 定義通知

導入依賴

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>

定義切面和切點

  • 類註解:@Aspect,@Component
  • 方法註解:@Pointcut
@Component
@Aspect //定義切面
public class UserAspect {
    @Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
    public void pointcut(){}
}

定義通知Advice(5類)

  • 通知是描述攔截執行的時機和具體的方法實現
  • 註意環繞通知的寫法,可以記錄執行接口的時間
@Component
@Aspect //定義切面
public class UserAspect {
    @Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
    public void pointcut(){}
    // 前置通知(要帶一個括號)
    @Before("pointcut()")
    public void doBefore(){
        //業務代碼
        System.out.println();
        System.out.println("執行瞭前置通知");
        System.out.println();
    }
}
 @Around("pointcut()")
    public Object doAround(ProceedingJoinPoint joinPoint){
        Object result = null;
        //執行前置業務代碼
        System.out.println("執行環繞通知的前置方法");
        try {
            //執行(攔截的)業務方法
            result = joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        //執行後置業務代碼
        System.out.println("執行環繞通知的後置方法");
        return result;
    }

到此這篇關於Spring針對AOP詳細講解的文章就介紹到這瞭,更多相關Spring AOP內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: