JavaEE進階知識學習-----SpringBootWeb進階-7-AOP處理請求知識
AOP統一處理請求日誌
AOP是一種程式設計正規化,與程式語言無關,是一種程式設計思想。AOP:面向切面程式設計,OOP:物件導向程式設計,POP:程式導向程式設計,還有函數語言程式設計等等。
AOP例項-記錄每一個HTTP請求
1.新增依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.編寫切面,切入點類
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.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Aspect
@Component
public class HttpAspect {
//使用log列印日誌
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
@Pointcut("execution(public * com.study.springbootdemo.controller.UserController.*(..))")
public void log(){}
@Before("log()")
public void doBefore(JoinPoint joinPoint){
//記錄Http請求
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//記錄URL
logger.info("url={}",request.getRequestURL());
//記錄請求方法
logger.info("method={}",request.getMethod());
//記錄請求ip
logger.info("ip={}",request.getRemoteAddr());
//記錄請求類的類方法
logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
//記錄引數
logger.info("args={}",joinPoint.getArgs());
}
@After("log()")
public void doAfter(){
logger.info("2222222222222222");
}
}
說明:
- @Pointcut("execution(public * com.study.springbootdemo.controller.UserController.*(..))")是一個切入點,表示UserController類中的所有方法。
- @Aspect註解表示這是一個該類是一個切面類
- @Component註解表示將該類交於Spring來管理,
- @Before("log()")註解表示UserController類中的方法被訪問前執行的方法
- @After("log()")註解表示UserController類中的方法被訪問後要執行的方法
3.啟動程式,使用postman進行測試
3.1測試查詢使用者列表
測試結果為:
3.2測試新增一個使用者
測試結果為:
相關文章
- JavaEE進階知識學習----Java NIO-4Java
- JavaEE進階知識學習-----SpringCloud(二)實踐準備JavaSpringGCCloud
- Vuejs進階知識(十八)【component 進階知識】VueJS
- js 進階知識JS
- JavaEE進階知識學習-----SpringCloud(三)Eureka服務註冊與發現JavaSpringGCCloud
- JavaEE進階知識學習----多執行緒JUC高階知識-5-執行緒池-Callable-執行緒排程Java執行緒
- 前端進階知識彙總前端
- Redis進階知識一覽Redis
- PHP進階知識總結PHP
- Android進階知識:ThreadLocalAndroidthread
- Vuejs進階知識(十六)【mixin】VueJS
- Vuejs進階知識(十九)【slot】VueJS
- C++11進階知識列表C++
- 前端進階必備知識彙總前端
- Android進階知識:Handler相關Android
- Android知識進階樹——Window & ViewRootImplAndroidView
- 前端進階-個人筆記-小知識前端筆記
- web知識進階——字元編解碼Web字元
- css零星進階知識點CSS
- 前端進階必須懂得TCP/IP知識前端TCP
- Vuejs進階知識(十七)【computed properties】VueJS
- AcWing 進階課知識點模板梳理
- Vuejs進階知識(二十三)【與CSS前處理器結合使用】VueJSCSS
- 人臉識別學習筆記二:進階篇筆記
- 直播美顏SDK的人臉識別技術進階知識
- Docker知識進階與容器編排技術Docker
- Vue進階知識(一)------專案初始化Vue
- Java-100天知識進階-JVM記憶體-知識鋪(三)JavaJVM記憶體
- 小白階段如何學習Web前端知識Web前端
- Python高階知識點學習(五)Python
- Node進階學習
- Vuejs進階知識(二十四)【自定義Directive】VueJS
- JavaScript進階知識點——函式和物件詳解JavaScript函式物件
- 一些常用的 Git 進階知識與技巧Git
- 《深度學習進階:自然語言處理》中的網址深度學習自然語言處理
- 未雨綢繆:Java高階架構進階必學之⑥大知識要點附視訊學習資料Java架構
- Java進階容器學習Java
- Web前端進階之JavaScript模組化程式設計知識Web前端JavaScript程式設計