天天看點

控制台列印_Spring Boot使用AOP在控制台列印請求、響應資訊

控制台列印_Spring Boot使用AOP在控制台列印請求、響應資訊
AOP稱為面向切面程式設計,在程式開發中主要用來解決一些系統層面上的問題,比如日志,事務,權限等。

AOP簡介

AOP全稱Aspect Oriented Programming,面向切面,AOP主要實作的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。其與設計模式完成的任務差不多,是提供另一種角度來思考程式的結構,來彌補面向對象程式設計的不足。

通俗點講就是提供一個為一個業務實作提供切面注入的機制,通過這種方式,在業務運作中将定義好的切面通過切入點綁定到業務中,以實作将一些特殊的邏輯綁定到此業務中。

比如,現在需要列印請求、響應資訊,很多地方有需要,這時候又不能把代碼複制一遍,所有需要AOP來實作。

常用注解說明

@Aspect -- 作用是把目前類辨別為一個切面供容器讀取

@Pointcut -- (切入點):就是帶有通知的連接配接點,在程式中主要展現為書寫切入點表達式

@Before -- 辨別一個前置增強方法,相當于BeforeAdvice的功能

@AfterReturning -- 後置增強,相當于AfterReturningAdvice,方法退出時執行

@AfterThrowing -- 異常抛出增強,相當于ThrowsAdvice

@After -- final增強,不管是抛出異常或者正常退出都會執行

@Around -- 環繞增強,相當于MethodInterceptor

pom.xml中引入AOP的jar包

org.springframework.boot spring-boot-starter-aopcom.alibaba fastjson 1.2.47
           

切面類代碼

package com.example.helloSpringBoot.aop;import com.alibaba.fastjson.JSON;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.annotation.Configuration;import org.springframework.web.context.request.RequestAttributes;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;/** * 切面 列印請求、傳回參數資訊 */@Aspect // 定義一個切面@Configurationpublic class LogRecordAspect { private static final Logger logger = LoggerFactory.getLogger(LogRecordAspect.class); // 定義切點Pointcut @Pointcut("execution(* com.example.helloSpringBoot.controller.*Controller.*(..))") public void excudeService() { } @Around("excudeService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) ra; HttpServletRequest request = sra.getRequest(); String method = request.getMethod(); String uri = request.getRequestURI(); String paraString = JSON.toJSONString(request.getParameterMap()); logger.info("***************************************************"); logger.info("請求開始, URI: {}, method: {}, params: {}