zoukankan      html  css  js  c++  java
  • aop计算方法耗时

    package necs.omms.common.aop;

    import lombok.extern.apachecommons.CommonsLog;
    import org.apache.commons.lang.time.StopWatch;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.Signature;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;

    @Component
    @Aspect
    @CommonsLog
    public class PerformanceMonitor {
    private static Log log = LogFactory.getLog(PerformanceMonitor.class);


    /**
    * A join point is in the controller layer if the method is
    * modified by public and defined in a type in the
    * com.shawn.service package or any sub-package under that
    * and modified by public.execution(* com.baobaotao..*(..))l
    */
    @Pointcut("execution( * necs.omms.controller..*(..))")
    private void controllerLayer() {
    }

    /**
    * Monitor the elapsed time of method on controller layer, in
    * order to detect performance problems as soon as possible.
    * If elapsed time > 1 s, log it as an error. Otherwise, log it
    * as an info.
    */
    @Around("controllerLayer()")
    public Object monitorElapsedTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    // Timing the method in controller layer
    StopWatch stopWatch = new StopWatch();
    stopWatch.start();
    Object result = proceedingJoinPoint.proceed();
    stopWatch.stop();

    // Log the elapsed time
    double elapsedTime = stopWatch.getTime() / 1000;
    Signature signature = proceedingJoinPoint.getSignature();
    String infoString = "[" + signature.toShortString() + "][Elapsed time: " + elapsedTime + " s]";
    if (elapsedTime > 1) {
    log.error(infoString + "[Note that it's time consuming!]");
    } else {
    log.info(infoString);
    }

    // Return the result
    return result;
    }

    @Before(value = "controllerLayer()")
    public void doBefore(){
    System.out.println("-------------@BEFORE------------");
    }

    }
  • 相关阅读:
    ckeditor 3.0.1使用
    也谈QQ表情弹出框的制作
    百度的模态弹出窗口
    day03 set集合,文件操作,字符编码以及函数式编程
    写在开始之前
    day07 类的进阶,socket编程初识
    day06 面向对象编程
    day02 Python 的模块,运算,数据类型以及方法
    day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数
    day08 多线程socket 编程,tcp粘包处理
  • 原文地址:https://www.cnblogs.com/wlhebut/p/8182206.html
Copyright © 2011-2022 走看看