SpringBoot AOP Aspect切面程式設計

2021-08-13 21:24:26 字數 1879 閱讀 7735

第一種filter屬於servlet提供的,後兩者是spring提供的,handlerinterceptor屬於spring mvc專案提供的,用來攔截請求,在methodinterceptor之前執行。 

實現乙個handlerinterceptor可以實現介面handlerinterceptor,也可以繼承handlerinterceptoradapter類,兩種方法一樣。

methodinterceptor是aop專案中的***,它攔截的目標是方法,即使不是controller中的方法。 

實現methodinterceptor***大致也分為兩種,一種是實現methodinterceptor介面,另一種利用aspect的註解或配置。

關於實現methodinterceptor介面的這種方法,還需要在配置檔案中做配置,在springmvc中使用還可以,在springboot中使用起來似乎沒有那麼方便。

在pom.xml中新增依賴:

org.springframework.bootgroupid>

spring-boot-starter-aopartifactid>

dependency>

新建testaspect類

import org.aspectj.lang.joinpoint;

import org.aspectj.lang.annotation.after;

import org.aspectj.lang.annotation.aspect;

import org.aspectj.lang.annotation.before;

import org.springframework.core.annotation.order;

import org.springframework.stereotype.component;

@aspect

@order(-99) // 控制多個aspect的執行順序,越小越先執行

@component

public class testaspect

@after("execution(public * com.zhangxf.dingcan..*(..))")

public void aftertest(joinpoint point)

}

然後建立乙個controller驗證一下

import org.springframework.stereotype.controller;

import org.springframework.web.bind.annotation.responsebody;

import com.zhangxf.dingcan.pojo.user;

@controller

public class hellocontroller

}

在瀏覽器輸入http://localhost:8080/get

關於集中攔截方法的區別總結: 

handlerinterceptoer攔截的是請求位址,所以針對請求位址做一些驗證、預處理等操作比較合適。當你需要統計請求的響應時間時methodinterceptor將不太容易做到,因為它可能跨越很多方法或者只涉及到已經定義好的方法中一部分**。 

methodinterceptor利用的是aop的實現機制,在本文中只說明了使用方式,關於原理和機制方面介紹的比較少,因為要說清楚這些需要講出aop的相當一部分內容。在對一些普通的方法上的攔截handlerinterceptoer就無能為力了,這時候只能利用aop的methodinterceptor。 

filter是servlet規範規定的,不屬於spring框架,也是用於請求的攔截。但是它適合更粗粒度的攔截,在請求前後做一些編譯碼處理、日誌記錄等.

Spring 通過註解方式實現AOP切面程式設計

spring 切面程式設計的目的是實現 的業務邏輯的解耦。切面程式設計用於諸如日誌記錄,事務處理,等非業務性的邏輯操作。目前spring的aop只能應用於方法層級上,無法在類 成員欄位等層級上操作。以下是srping的aop程式設計分為註解方式和xml配置方式。以下過程詳細說明了通過註解方式實現ao...

Spring註解驅動 註解實現AOP切面程式設計

需求 在指定包下的所有類中的有方法都加上前置和後置通知。1.aop類,使用的註解 aspect表示當前的類為aop類 aspect public class logaop after execution service.public void doafter bean public logaop l...

C 使用KingAOP實現AOP面向切面程式設計二

本文繼續上篇講述一下比較複雜點的aop例子,先新建乙個控制台專案,然後同樣先在nuget中搜尋安裝kingaop到專案中 1 專案結構 2 定義乙個登入實體類user和loggingaspect切面日誌類 public class user public string name public str...