AOP應用之------測試方法運行時間

package com.cplatform.tencent.task;

import java.util.HashMap;
import java.util.Map;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.lang.time.StopWatch;

public class MethodTimeActive implements MethodInterceptor {
    /**
     * 自定義map集合,key:方法名,value:[0:運行次數,1:總時間]
     */
    public static Map<String,Long[]> methodTest = new HashMap<String, Long[]>();
    /**
     * 攔截要執行的方法
     */
    public Object invoke(MethodInvocation invocation) throws Throwable {
        // 創建一個計時器
        StopWatch watch = new StopWatch();
        // 計時器開始
        watch.start(); 
        // 執行方法
        Object object = invocation.proceed();
        // 計時器停止
        watch.stop();
        // 方法名稱
        String methodName = invocation.getMethod().getName();
        // 獲取計時器計時時間
        Long time = watch.getTime();
        if(methodTest.containsKey(methodName)) {
            Long[] x = methodTest.get(methodName);
            x[0]++;
            x[1] += time;
        }else{
            methodTest.put(methodName, new Long[] {1L,time});
        }
        /**
        *這裏可以將map中的信息寫入日誌,或者是控制檯以供觀察
        */
        return object;
    }

}


----------

    <aop:config>
        <aop:advisor id="methodTimeLog" advice-ref="methodTimeAdvice" pointcut="execution(* com.cplatform.tencent.sync..*.*(..))"/>  
        <aop:advisor id="methodTimeLog2" advice-ref="methodTimeAdvice" pointcut="execution(* com.cplatform.tencent.utils..*.*(..))"/>  
    </aop:config>  
    <bean id="methodTimeAdvice" class="com.cplatform.tencent.task.MethodTimeActive"/>
發佈了90 篇原創文章 · 獲贊 13 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章