少年阿賓

          那些青春的歲月

            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 閱讀(416) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 康保县| 鸡泽县| 嘉义县| 广水市| 长泰县| 固始县| 永平县| 云梦县| 福贡县| 襄汾县| 潍坊市| 湘阴县| 永寿县| 克拉玛依市| 隆昌县| 镇坪县| 甘孜| 永昌县| 大港区| 皮山县| 宁远县| 内江市| 东明县| 明溪县| 赤壁市| 池州市| 陇南市| 威海市| 公主岭市| 黄龙县| 额尔古纳市| 古交市| 云梦县| 杂多县| 安吉县| 麻阳| 临西县| 闸北区| 平湖市| 文登市| 湖北省|