首先引入aop pom依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.8.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
<scope>compile</scope>
</dependency>
1.创建注解类 Log
package com.zhdj.common.annotation;
/**
* 被该注解注释的方法会打印日志
* @author 博博
* @time 2020/5/25
*/
public @interface Log {
}
2.创建 aop切面类,来进行对 自定义注解的切入
package com.zhdj.common.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Component
// lombok 的日志注解
@Slf4j
// 该注解 标识这是个aop类
@Aspect
public class LogAop {
/**
* 切入被该注解标志的方法切入
*/
@Pointcut("@annotation(com.zhdj.common.annotation.Log)")
public void logPointcut() {
}
/**
* 前置切入
*/
@Before("logPointcut()")
public void doBefore(JoinPoint jp) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
System.out.println();
log.info("请求路径:" + request.getRequestURL().toString());
log.info("请求类型:" + request.getMethod());
Enumeration<String> enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String name = enu.nextElement();
log.info("属性名:{},属性值:{}", name, request.getParameter(name));
}
}
/**
* 后置切入
*/
@AfterReturning(returning = "obj", pointcut = "logPointcut()")
public void doAfter(Object obj) {
log.info("调用结束.... 返回值:{} ",obj);
}
}
3.在需要打印日志的controller方法 上加上@Log注解
前置切入
后置切入