本文共 1859 字,大约阅读时间需要 6 分钟。
面向切面编程AOP是一种编程范式,与语言无关,是一种程序设计思想
使用AOP统一处理请求日志
1、增加maven配置
org.springframework.boot spring-boot-starter-aop
2、新增类
package cn.edu.shu.ces_chenjie.aspect;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.*;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@Componentpublic class HttpAspect { private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class); //新增一个切点 @Pointcut("execution(public * cn.edu.shu.ces_chenjie.controller.PersonController.*(..))") public void log(){ } //在切点执行以前 @Before("log()") public void before(JoinPoint joinPoint){ logger.info("-------------------------所有请求结束之前进行拦截-------------------------------------"); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); logger.info("url={}",request.getRequestURL()); logger.info("method={}",request.getMethod()); logger.info("ip={}",request.getRemoteAddr()); logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName() ); logger.info("args={}",joinPoint.getArgs()); } //在切点执行以后 @After("log()") public void after(){ logger.info("-------------------------所有请求结束之后进行拦截-------------------------------------"); } //在切点返回以后 @AfterReturning(pointcut = "log()",returning = "object") public void afterReturning(Object object){ logger.info("response={}",object); }}3、运行