通过AOP实现日志输出
使用AOP思想添加环绕增强型日志
package com.jia.mall.order.common.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
* 日志切面
* @author Jiazhibo
*/
@Aspect
@Component
@Slf4j
public class RequestLogAspect {
//拦截web下所有方法
@Around("execution(* com.jia.mall.*.controller.*.*(..))")
public Object logPointcut(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
String methodName = proceedingJoinPoint.getSignature().getName();
String classPath = proceedingJoinPoint.getSignature().getDeclaringTypeName();
long statrTime = System.currentTimeMillis();
Object[] args = proceedingJoinPoint.getArgs();
if (args != null && args.length > 0) {
log.info("\r\n请求方法:{}.{}(..)\r\n请求参数:{}", classPath, methodName, args[0]);
} else {
log.info("\r\n请求方法:{}.{}(..)", classPath, methodName);
}
Object result = proceedingJoinPoint.proceed();
long endTime = System.currentTimeMillis();
log.info("\r\n请求方法:{}.{}(..)\r\n响应参数:{}\r\n响应时间:{}ms", classPath, methodName, result, endTime - statrTime);
return result;
}
}
mybatis-plus添加sql语句输出
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
效果:
AOP注解
1、@Aspect
-
名称:@Aspect
-
类型:注解
-
位置:类定义上方
-
作用:设置当前类为切面类
-
格式:
@Aspect public class AopAdvice { }
-
说明:一个beans标签中可以配置多个aop:config标签
2、@Pointcut
-
名称:@Pointcut
-
类型:注解
-
位置:方法定义上方
-
作用:使用当前方法名作为切入点引用名称
-
格式:
@Pointcut("execution(\* \*(..))") public void pt() { }
-
说明:被修饰的方法忽略其业务功能,格式设定为无参无返回值的方法,方法体内空实现(非抽象)
3、@Before
-
名称:@Before
-
类型:注解
-
位置:方法定义上方
-
作用:标注当前方法作为前置通知
-
格式:
@Before("pt()") public void before(){ }
-
特殊参数:
- 无
4、@After
-
名称:@After
-
类型:注解
-
位置:方法定义上方
-
作用:标注当前方法作为后置通知
-
格式:
@After("pt()") public void after(){ }
-
特殊参数:
- 无
5、@AfterReturning
-
名称:@AfterReturning
-
类型:注解
-
位置:方法定义上方
-
作用:标注当前方法作为返回后通知
-
格式:
@AfterReturning(value="pt()",returning = "ret") public void afterReturning(Object ret) { }
-
特殊参数:
- returning :设定使用通知方法参数接收返回值的变量名
6、@AfterThrowing
-
名称:@AfterThrowing
-
类型:注解
-
位置:方法定义上方
-
作用:标注当前方法作为异常后通知
-
格式:
@AfterThrowing(value="pt()",throwing = "t") public void afterThrowing(Throwable t){ }
-
特殊参数:
- throwing :设定使用通知方法参数接收原始方法中抛出的异常对象名
7、@Around
-
名称:@Around
-
类型:注解
-
位置:方法定义上方
-
作用:标注当前方法作为环绕通知
-
格式:
@Around("pt()") public Object around(ProceedingJoinPoint pjp) throws Throwable { Object ret = pjp.proceed(); return ret; }
-
特殊参数:
- 无
评论区