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------------");
    }

    }
  • 相关阅读:
    hbase源码分析.客户端.预备知识.ExecutorService
    Dijkstra for MapReduce (1)
    [leetcode]Palindrome.Partitioning
    CSS3兼容性写法
    C#延时
    python学习日记180823
    2012年11月11日 本周随笔
    2012年11月20日 上周回顾 && 疯狂的程序员书摘
    2012年11月27日 上周回顾
    hadoop loadBalance源码分析
  • 原文地址:https://www.cnblogs.com/wlhebut/p/8182206.html
Copyright © 2011-2022 走看看