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

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

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

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創(chuàng)作品(標(biāo)有[原]字樣)轉(zhuǎn)載時請注明出處,謝謝。

    常用鏈接

    常用設(shè)置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 155592
    • 排名 - 390

    最新評論

    [關(guān)鍵字]:java,design pattern,設(shè)計模式,《Java與模式》學(xué)習(xí),Proxy Pattern,代理模式,動態(tài)代理,Dynamic Proxy
    [環(huán)境]:StarUML5.0 + JDK6
    [作者]:Winty (wintys@gmail.com) http://www.tkk7.com/wintys/
    [正文]:

    package pattern.proxy.dynamic;

    import java.lang.reflect.Proxy;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    /**
     * 代理模式:Proxy Pattern
     * Java對代理模式的支持:
     * java.lang.reflect.Proxy、java.lang.reflect.InvocationHandler.
     * @version 2009-6-27
     * @author Winty(wintys@gmail.com)
     */
    public class DynamicProxyTest{
        public static void main(String[] args){
            Subject subject = new RealSubject();
            Subject proxy = (Subject)DynamicProxySubjectFactory.factory(subject);
            proxy.request();
        }
    }


    /**
     * 抽象主題角色
     */
    abstract interface Subject{
        public void request();
    }


    /**
     * 真實主題角色
     */
    class RealSubject implements Subject{
        @Override
        public void request(){
            System.out.println("do request.");
        }
    }


    class DynamicProxyHandler implements InvocationHandler{
        private Subject realSubject;

        public DynamicProxyHandler(Subject realSubject){
            this.realSubject = realSubject;
        }

        //proxy代表Proxy生成的代理對象實例$Proxy0
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable{
            
            preRequest();
            Object result = method.invoke(realSubject , args);
            postRequest();

            return result;
        }

        private void preRequest(){
            System.out.println("do preRequest");
        }

        private void postRequest(){
            System.out.println("do postRequest");
        }
    }

    /**
     * 動態(tài)代理類工廠 : 由Poxy類動態(tài)生成一個代理類(如:$Proxy0)。
     */
    class DynamicProxySubjectFactory{
        /**
         * @param subject 被代理的真實對象。Subject必須為接口,
         *  即subject的真實類型是實現(xiàn)了Subject接口的類。
         *  因為JDK的動態(tài)代理并不能隨心所欲的代理所有的,
         *  Proxy.newProxyInstance()的第二個參數(shù)決定只能代理接口。
         *
         * @return 代理類實例
         */
        public static Object factory(Subject subject){
            Class<?> cls = subject.getClass();
            DynamicProxyHandler handler = new DynamicProxyHandler(subject);

            return Proxy.newProxyInstance(cls.getClassLoader(),
                                                            cls.getInterfaces(),
                                                            handler);
        }
    }


     運(yùn)行結(jié)果:
    do preRequest
    do request.
    do postRequest

    運(yùn)行時,如果出現(xiàn)類似如下錯誤,則可能的原因是沒有把Subject聲明為接口
    java.lang.ClassCastException: $Proxy0 cannot be cast to pattern.proxy.dynamic.Subject

    [參考資料]:
    [1] 《Java與模式》: 電子工業(yè)出版社
    [2] 代理模式(Proxy pattern) 轉(zhuǎn)載 : http://www.tkk7.com/terry-zj/archive/2006/06/20/53937.html
    [3] Java動態(tài)代理實現(xiàn) : http://blog.csdn.net/kongxx/archive/2005/07/04/413021.aspx
    [4] Java動態(tài)代理 : http://www.mxjava.com/blog/archives/224.html
    [5] java動態(tài)代理實現(xiàn)數(shù)據(jù)庫事務(wù)攔截器 : http://www.mxjava.com/blog/archives/60.html
    [6] Java初學(xué)者如何邁出AOP第一步--使用Java 動態(tài)代理實現(xiàn)AOP : http://www.javaresearch.org/article/16922.htm
    posted on 2009-06-28 10:13 天堂露珠 閱讀(1394) 評論(0)  編輯  收藏 所屬分類: Pattern
    主站蜘蛛池模板: 少妇人妻偷人精品免费视频 | 免费观看四虎精品国产永久| 亚洲高清在线观看| 老司机精品免费视频| 国产亚洲精品看片在线观看| 国产美女视频免费观看的网站| 国产亚洲精品国看不卡| a级毛片免费在线观看| 亚洲精品V欧洲精品V日韩精品| a级成人毛片免费视频高清| 国产亚洲婷婷香蕉久久精品| 免费播放在线日本感人片| 亚洲第一福利视频| 午夜国产精品免费观看 | 久久久无码精品亚洲日韩蜜桃| 男女作爱在线播放免费网站| 国产亚洲真人做受在线观看| 一级毛片免费观看不卡的| 亚洲免费观看在线视频| 免费理论片51人人看电影| 美女被免费视频网站a| 国产日产亚洲系列| 永久免费视频网站在线观看| 亚洲日韩精品无码专区加勒比| 又色又污又黄无遮挡的免费视| 巨胸喷奶水www永久免费| 亚洲欧洲中文日产| 成人永久福利免费观看| 久久久久国色AV免费观看| 精品亚洲成a人片在线观看少妇 | 国产免费丝袜调教视频| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲成年人啊啊aa在线观看| 久久久久久久99精品免费观看| 亚洲av午夜精品无码专区| 免费在线黄色网址| 99久久99久久精品免费观看 | 亚洲AV无码国产精品色午友在线 | 少妇亚洲免费精品| 777爽死你无码免费看一二区| 亚洲国产午夜精品理论片在线播放 |