少年阿賓

          那些青春的歲月

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            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;
            }
          }
          /*
          對(duì)于上面的代碼需要說(shuō)明的是下面兩行代碼:
            Object result = methodInvocation.proceed();
            return result;
          整個(gè)程序的流程是這樣的:
            1,先是執(zhí)行在Object result = methodInvocation.proceed();前面的代碼;
            2,接著執(zhí)行Object result = methodInvocation.proceed();,它把執(zhí)行控制權(quán)交給了interceptor stack(攔截器棧)內(nèi)的下一個(gè)interceptor,如果沒(méi)有了就交給真正的業(yè)務(wù)方法;
            3,然后執(zhí)行return result;之前的代碼;
            4,最后執(zhí)行return result;,它把控制權(quán)交回它之上的interceptor,如果沒(méi)有了就退出interceptor stack。
          */
          posted on 2015-02-25 17:36 abin 閱讀(416) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 邢台县| 商城县| 凤台县| 沽源县| 昌江| 崇义县| 芜湖市| 商洛市| 铁岭市| 容城县| 丹凤县| 永顺县| 吉木乃县| 婺源县| 大冶市| 莒南县| 田东县| 怀集县| 长沙市| 永新县| 汝南县| 安徽省| 霍林郭勒市| 彭州市| 石棉县| 福州市| 石柱| 揭东县| 襄汾县| 江门市| 偏关县| 黄冈市| 云林县| 英山县| 长春市| 屏南县| 名山县| 九寨沟县| 临城县| 乡宁县| 利辛县|