<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    Java動態(tài)代理實現(xiàn)

    Kongxx

    在目前的Java開發(fā)包中包含了對動態(tài)代理的支持,但是其實現(xiàn)只支持對接口的的實現(xiàn)。

    其實現(xiàn)主要通過是java.lang.reflect.Proxy類和java.lang.reflect.InvocationHandler接口。

    Proxy類主要用來獲取動態(tài)代理對象,InvocationHandler接口用來約束調(diào)用者實現(xiàn),如下,HelloWorld接口定義的業(yè)務(wù)方法,HelloWorldImplHelloWorld接口的實現(xiàn),HelloWorldHandlerInvocationHandler接口實現(xiàn)。代碼如下:

    業(yè)務(wù)接口:

    public interface HelloWorld {

           void sayHelloWorld() ;

    }

    業(yè)務(wù)接口實現(xiàn):

    public class HelloWorldImpl implements HelloWorld {

     

           public void sayHelloWorld() {

                  System.out.println("Hello World!");            

           }

    }

    InvocationHandler實現(xiàn),需要在接口方法調(diào)用前后加入一部份處理工作,這里僅僅在方法調(diào)用前后向后臺輸出兩句字符串,其代碼如下:

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Method;

    public class HelloWorldHandler implements InvocationHandler {

           //要代理的原始對象

           private Object objOriginal;

           /**

            * 構(gòu)造函數(shù)。

            * @param obj 要代理的原始對象。

            */

           public HelloWorldHandler(Object obj) {

                  this.objOriginal = obj ;

           }

           public Object invoke(Object proxy, Method method, Object[] args)

                         throws Throwable {

                 

                  Object result ;

                 

            //方法調(diào)用之前

                  doBefore();

                 

            //調(diào)用原始對象的方法

                  result = method.invoke(this.objOriginal ,args);

                 

            //方法調(diào)用之后

                  doAfter();

                 

                  return result ;

           }

          

           private void doBefore() {

                  System.out.println("before method invoke!");

           }

          

           private void doAfter() {

                  System.out.println("after method invoke!");

           }

    }

    測試代碼:

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Proxy;

     

     

     

     

     

     

    public class Test {

     

     

     

     

     

     

           public static void main(String[] args) {

     

     

     

     

     

     

                  HelloWorld hw = new HelloWorldImpl();

                 

                  InvocationHandler handler = new HelloWorldHandler(hw);

                 

                  HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(

                                hw.getClass().getClassLoader(),

                                hw.getClass().getInterfaces(),

                                handler);

     

                  proxy.sayHelloWorld();

           }

    }

    Ø         首先獲取一個業(yè)務(wù)接口的實現(xiàn)對象;

    Ø         獲取一個InvocationHandler實現(xiàn),此處是HelloWorldHandler對象;

    Ø         創(chuàng)建動態(tài)代理對象;

    Ø         通過動態(tài)代理對象調(diào)用sayHelloWorld()方法,此時會在原始對象HelloWorldImpl. sayHelloWorld()方法前后輸出兩句字符串。

    運(yùn)行測試類輸出如下:

    before method invoke!

    Hello World!

    after method invoke!

    此處Test類中的方法調(diào)用代碼比較多,在我們的實際應(yīng)用中可以通過配置文件來來簡化客戶端的調(diào)用實現(xiàn)。另外也可以通過動態(tài)代理來實現(xiàn)簡單的AOP。

    http://www.cnblogs.com/kongxx/archive/2005/08/08/209749.html 

    posted on 2012-09-07 00:22 abin 閱讀(664) 評論(0)  編輯  收藏 所屬分類: Java動態(tài)代理

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV无码久久精品成人| 性无码免费一区二区三区在线| 亚洲网站视频在线观看| 亚洲?V乱码久久精品蜜桃 | 亚洲国产成人精品女人久久久| 114一级毛片免费| a级毛片无码免费真人久久| 爱情岛论坛亚洲品质自拍视频网站| 亚洲成人免费在线观看| 亚洲av最新在线网址| MM131亚洲国产美女久久| 国产无遮挡裸体免费视频 | 国产传媒在线观看视频免费观看| 在线观看成人免费视频不卡| 久久国产精品免费专区| 91免费在线视频| 一级毛片免费在线播放| 色九月亚洲综合网| 午夜亚洲国产理论片二级港台二级| 久久精品国产亚洲AV蜜臀色欲| 91在线精品亚洲一区二区| 国产午夜亚洲不卡| 亚洲精品无码日韩国产不卡?V| 国产伦精品一区二区三区免费下载 | 成年免费a级毛片免费看无码| 一本久久免费视频| 成人精品综合免费视频| 青青青视频免费观看| 黄页网址大全免费观看12网站| 日韩国产精品亚洲а∨天堂免| 亚洲成av人在线观看网站| 亚洲人成人伊人成综合网无码| 亚洲人片在线观看天堂无码| 亚洲色大成网站www尤物| 亚洲综合欧美色五月俺也去| 亚洲中文字幕久久精品蜜桃| 亚洲中文字幕乱码一区| 亚洲高清毛片一区二区| 国产成人不卡亚洲精品91| 免费国产在线精品一区| h片在线播放免费高清|