• aop log切面


    @Aspect:描述一个切面类,定义切面类的时候需要打上这个注解

    @Component:spring-boot配置类

    package com.*.*.tools;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.Signature;
    import org.aspectj.lang.annotation.*;
    import org.aspectj.lang.reflect.MethodSignature;
    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.Arrays;
    
    @Aspect
    @Component
    public class LogAspect {
    
        /**
         * 功能描述: 拦截对这个包下所有方法的访问
         *
         * @param:[]
         * @return:void
         **/
        @Pointcut("execution(* com.*.*.controller.*..*(..))")
        public void loginLog() {
        }
    
        // 前置通知
        @Before("loginLog()")
        public void loginBefore(JoinPoint joinPoint) {
    
            // 我们从请求的上下文中获取request,记录请求的内容
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    
            HttpServletRequest request = attributes.getRequest();
    
            System.out.println("请求路径 : " + request.getRequestURL());
            System.out.println("请求方式 : " + request.getMethod());
            System.out.println("方法名 : " + joinPoint.getSignature().getName());
            System.out.println("类路径 : " + joinPoint.getSignature().getDeclaringTypeName());
            System.out.println("参数 : " + Arrays.toString(joinPoint.getArgs()));
        }
    
    //    @AfterReturning(returning = "object", pointcut = "loginLog()")
    //    public void doAfterReturning(Object object) {
    //
    //        System.out.println("方法的返回值 : " + object);
    //    }
    
        // 方法发生异常时执行该方法
        @AfterThrowing(throwing = "e",pointcut = "loginLog()")
        public void throwsExecute(JoinPoint joinPoint, Exception e) {
    
            System.err.println("方法执行异常 : " + e.getMessage());
        }
    
        // 后置通知
    //    @After("loginLog()")
    //    public void afterInform() {
    //
    //        System.out.println("后置通知结束");
    //    }
    
        // 环绕通知
        @Around("loginLog()")
        public Object surroundInform(ProceedingJoinPoint proceedingJoinPoint) {
    
            long startTime=System.currentTimeMillis();
            try {
                Object o =  proceedingJoinPoint.proceed();
                long times=System.currentTimeMillis()-startTime;
                MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
                String methodName = signature.getDeclaringTypeName() + "." + signature.getName();
                System.out.println("【"+methodName+"】执行时间:" +times/1000+"s" );
                return o;
            } catch (Throwable e) {
                e.printStackTrace();
                return null;
            }
        }
    }
  • 相关阅读:
    设计模式之备忘录模式
    特殊传参方式
    页面响应效率测试
    composer安装的包git无法提交的解决办法是因为安装的时候生成了.git隐藏文件
    数据结构和算法深入浅出理解
    中缀表达式转换为后缀表达式
    p2p技术
    【自动化测试】WebDriver使用
    pt-query-digest简介使用
    mac编译openJDK8
  • 原文地址:https://www.cnblogs.com/paisen/p/10144154.html
Copyright © 2020-2023  润新知