• SpringBoot下使用AOP做日志


    AOP实现接口执行时间的计算:

    • SpringBoot项目导入spring-boot-starter-aop依赖
    • 编写切面类
      • 类上加@Aspect注解,表明这是一个切面类
      • 类上加@Component,把切面交给Spring管理(我们要切的Controller/Service都是Spring容器的,切面要对它们起作用,就必须同样进入容器)
      • 类内部配置切点表达式,比如@Pointcut("execution(* com.bravo.demo.controller.*.*(..))") 表示对com.bravo.demo.controller包下所有方法进行增强
      • 类内部编写增强逻辑,通常使用@Before、@Around声明这是一个增强,不同的注解增强的方式不同,比如@Before前置增强、@Around环绕增强

    1、导入AOP整合SpringBoot依赖

     <!--SpringBoot整合Aop依赖-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-aop</artifactId>
     </dependency>
    

    2、编写切面类:com.zhixi.config.aop.ApiTimeLogAspect

    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.springframework.stereotype.Component;
    
    /**
     * @ClassName ApiTimeLogAspect
     * @Author zhangzhixi
     * @Description
     * @Date 2022-4-15 10:42
     * @Version 1.0
     */
    @Slf4j
    /*第一步:声明这是一个切面类*/
    @Aspect
    @Component
    public class ApiTimeLogAspect {
    
        /**
         * 第二步:定义切点表达式,明确要对那些方法起作用(比如,只对com.bravo.demo.controller包的方法计算接口耗时)
         */
        @Pointcut("execution(* com.zhixi.controller.*.*(..))")
        public void controllerPointcut() {
        }
    
        /**
         * 第三步:1.通过引用切点表达式,明确这个增强的应用规则。 2.编写增强逻辑
         *
         * @param proceedingJoinPoint 执行目标方法的参数
         * @return 返回目标方法的执行结果
         * @throws Throwable proceedingJoinPoint.proceed()方法抛出的异常
         */
        @Around(value = "controllerPointcut()")
        public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
            // 记录接口执行前的时间戳
            long startTime = System.currentTimeMillis();
            // 实际执行目标方法,类似动态代理的invoke()执行目标方法
            Object result = proceedingJoinPoint.proceed();
            // 计算接口耗时
            log.info("------------ 耗时: {} ms ------------", System.currentTimeMillis() - startTime);
            // 只做增强不做改变,还是要把接口原本的结果返回
            return result;
        }
    }
    

    3、启动项目访问接口即可

  • 相关阅读:
    springmvc 注解式开发 处理器方法的返回值
    springmvc 注解式开发 接收请求参数
    【洛谷P1379】八数码难题 状压bfs
    【模板】ST表
    【POJ1741】Tree
    【洛谷P1073】最优贸易
    【POJ3662】Telephone Lines dij + 二分答案
    【模板】spfa
    【洛谷P2384】最短乘积路径
    【bzoj2038】小Z的袜子
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/16150607.html
Copyright © 2020-2023  润新知