前言
使用Aop的环绕通知实现
加入依赖
<!--引入lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--引入AOP依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
编码
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
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.aspectj.lang.reflect.MethodSignature;
import org.springframework.context.annotation.Configuration;
@Aspect
@Configuration
@Slf4j
public class WebLogAspect {
ObjectMapper objectMapper = new ObjectMapper();
@Pointcut("execution(* com.gongj.mall.product.scenario.controller..*.*(..))")
public void webLog(){}
@Around(value = "webLog()")
public Object webLogAround(ProceedingJoinPoint joinPoint) throws Throwable {
String className = joinPoint.getTarget().getClass().getName();
MethodSignature signature = (MethodSignature)joinPoint.getSignature();
String methodName = new StringBuffer(className.replaceFirst("com.gongj.mall.", ""))
.append(".")
.append(signature.getMethod().getName())
.append("():").toString();
log.info("==========> {} Request Params:{}",methodName, objectMapper.writeValueAsString(joinPoint.getArgs()));
Object proceed = joinPoint.proceed();
log.info("==========> {} Return Message:{}",methodName,objectMapper.writeValueAsString(proceed));
return proceed;
}
}
其中几个方法进行介绍:
- Object getTarget:获取被代理的对象
- Signature getSignature:返回目标方法的签名对象
- Object[] getArgs:返回目标方法的参数
- Object proceed:执行目标方法
网友评论