天天看点

控制台打印_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: {}