posts - 495,  comments - 11,  trackbacks - 0
          從上面的例子我們看出.只要你是采用面向接口編程,那么,你的任何對象的方法執行之前要加上記錄日志的操作都是可以的.他(DynaPoxyHello)自動去代理執行被代理對象(Hello)中的每一個方法,一個java.lang.reflect.InvocationHandler接口就把我們的代理對象和被代理對象解藕了.但是,我們又發現還有一個問題,這個DynaPoxyHello對象只能跟我們去在方法前后加上日志記錄的操作.我們能不能把DynaPoxyHello對象和日志操作對象(Logger)解藕呢?
          結果是肯定的.讓我們來分析一下我們的需求.
          我們要在被代理對象的方法前面或者后面去加上日志操作代碼(或者是其它操作的代碼),
          那么,我們可以抽象出一個接口,這個接口里就只有兩個方法,一個是在被代理對象要執行方法之前執行的方法,我們取名為start,第二個方法就是在被代理對象執行方法之后執行的方法,我們取名為end .接口定義如下 :
          1packagesinosoft.dj.aop.proxyaop;
          2
          3importjava.lang.reflect.Method;
          4
          5publicinterfaceIOperation{
          6??/**
          7????? * 方法執行之前的操作
          8????? *@parammethod
          9?????*/

          10????voidstart(Method method);
          11??/**
          12????? * 方法執行之后的操作
          13????? *@parammethod
          14?????*/

          15????voidend(Method method);
          16}

          17

          我們去寫一個實現上面接口的類.我們把作他真正的操作者,如下面是日志操作者的一個類:
          LoggerOperation.java
          packagesinosoft.dj.aop.proxyaop;

          importjava.lang.reflect.Method;

          publicclassLoggerOperationimplementsIOperation{

          ????
          publicvoidend(Method method){
          ???????? Logger.logging(Level.DEBUGE, method.getName()
          +"Method end.");
          ???? }


          ????
          publicvoidstart(Method method){
          ???????? Logger.logging(Level.INFO, method.getName()
          +"Method Start!");
          ???? }


          }


          posted on 2009-07-24 20:42 jadmin 閱讀(73) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 蒲江县| 合江县| 阿图什市| 天峻县| 专栏| 梓潼县| 舞钢市| 新巴尔虎右旗| 通化县| 嘉禾县| 新余市| 海口市| 长白| 司法| 固始县| 资阳市| 聊城市| 阜宁县| 松滋市| 栾川县| 永嘉县| 鄄城县| 建昌县| 嘉义县| 敖汉旗| 广河县| 耿马| 德保县| 辛集市| 买车| 郴州市| 凤凰县| 郸城县| 余庆县| 扎囊县| 灌南县| 滦南县| 太谷县| 五原县| 中山市| 呼伦贝尔市|