少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          package com.cp.common.aop;
          import java.lang.reflect.Method;
          import org.aopalliance.intercept.MethodInterceptor;
          import org.aopalliance.intercept.MethodInvocation;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          public class TimeHandler
            implements MethodInterceptor
          {
            private static final Log log = LogFactory.getLog(TimeHandler.class);
            private int error;
            private int warn;
            private int info;
            public TimeHandler()
            {
              this.error = 200;
              this.warn = 100;
              this.info = 50;
            }
            public Object invoke(MethodInvocation methodInvocation)
              throws Throwable
            {
              long procTime = System.currentTimeMillis();
              try {
                Object result = methodInvocation.proceed();
               return result;
              }
              finally {
                procTime = System.currentTimeMillis() - procTime;
                String msg = "Process method " + methodInvocation.getMethod().getName() + " successful! Total time: " + procTime + " milliseconds!";
                if (procTime > this.error)
                  if (log.isErrorEnabled()) log.error(msg);
                else if (procTime > this.warn)
                  if (log.isWarnEnabled()) log.warn(msg);
                else if (procTime > this.info)
                  if (log.isInfoEnabled()) log.info(msg);
                else if (log.isDebugEnabled()) log.debug(msg);
              }
            }
            public void setError(int error)
            {
              this.error = error;
            }
            public void setWarn(int warn)
            {
              this.warn = warn;
            }
            public void setInfo(int info)
            {
              this.info = info;
            }
          }
          /*
          對于上面的代碼需要說明的是下面兩行代碼:
            Object result = methodInvocation.proceed();
            return result;
          整個程序的流程是這樣的:
            1,先是執行在Object result = methodInvocation.proceed();前面的代碼;
            2,接著執行Object result = methodInvocation.proceed();,它把執行控制權交給了interceptor stack(攔截器棧)內的下一個interceptor,如果沒有了就交給真正的業務方法;
            3,然后執行return result;之前的代碼;
            4,最后執行return result;,它把控制權交回它之上的interceptor,如果沒有了就退出interceptor stack。
          */
          posted on 2015-02-25 17:36 abin 閱讀(415) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 法库县| 收藏| 武山县| 武义县| 新巴尔虎右旗| 抚宁县| 资阳市| 唐海县| 寿光市| 宝兴县| 康保县| 缙云县| 延津县| 南召县| 小金县| 泸定县| 永胜县| 同心县| 仁寿县| 江陵县| 嘉祥县| 乌拉特中旗| 大同县| 安图县| 固安县| 东乌珠穆沁旗| 左云县| 保靖县| 克什克腾旗| 邯郸市| 余庆县| 嘉荫县| 永德县| 乌拉特前旗| 陕西省| 颍上县| 卢氏县| 贵港市| 桃园县| 军事| 繁峙县|