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

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

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

    Loading...

    java .net

    開始學習struts2(五)

    說是struts2的核心就是攔截器
    先看看攔截器的實現
    實現攔截器有這么幾個東西構成
    1、目標對象-將被攔截的對象,這個對象中的方法被調用是將被攔截
    要求目標對象面向接口編程,首先要定義接口
    package com.test.interceptor;

    /**
    * Created by IntelliJ IDEA.
    * User: Administrator
    * Date: 2009-1-9
    * Time: 17:37:23
    * 面向接口編程
    * 目標對象的接口
    */
    public interface TargetInterface {
        public void doSomething();
    }
    目標對象實現
    package com.test.interceptor;

    /**
    * Created by IntelliJ IDEA.
    * User: Administrator
    * Date: 2009-1-9
    * Time: 17:36:26
    * 目標對象
    */
    public class Target implements TargetInterface{
        public void doSomething(){
            System.out.println("do something");
        }
    }

    2、攔截器對象-里面包含在調用目標對象前或后要調用的方法
    package com.test.interceptor;

    /**
    * Created by IntelliJ IDEA.
    * User: Administrator
    * Date: 2009-1-9
    * Time: 17:39:32
    * 攔截器
    */
    public class Interceptor {
        public void before(){
            System.out.println("before");
        }

        public void after(){
            System.out.println("after");
        }
    }

    3、處理器-處理器決定攔截器如何攔截目標對象
    package com.test.interceptor;

    /**
    * Created by IntelliJ IDEA.
    * User: Administrator
    * Date: 2009-1-9
    * Time: 17:41:08
    */
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;

    /**
    * 處理器
    * 在這里將目標對象Target和攔截器Interceptor聯系在了一起
    */
    public class MyHandler implements InvocationHandler{

        /**
         * 目標對象
         * 將來目標對象的方法將被注入interceptor
         */
        private Object object;

        /**
         * 攔截器
         * MyHandler負責將Interceptor這個攔截器注入到傳入的目標對象object
         */
        private Interceptor interceptor = new Interceptor();

        public void setObject(Object object){
            this.object = object;
        }

        /**
         * 實現InvocationHandler接口的方法
         * @param o 在其上調用方法的代理實例
         * @param method 對應于在代理實例上調用的接口方法的 Method 實例
         * @param objects 包含傳入代理實例上方法調用的參數值的對象數組
         * @return  從代理實例的方法調用返回的值
         * @throws Throwable
         */
        public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
            Object result = null;
            interceptor.before();
            result = method.invoke(object,objects);
            interceptor.after();
            return result;
        }
    }

    4、代理對象-用于得到目標對象的代理對象
    package com.test.interceptor;

    /**
    * Created by IntelliJ IDEA.
    * User: Administrator
    * Date: 2009-1-9
    * Time: 17:50:52
    * 代理類
    */
    import java.lang.reflect.Proxy;
    public class MyProxy {
        /**
         * 返回obj的,處理器為MyHandler的代理對象
         * @param obj 目標對象
         * @return  目標對象的代理對象
         */
        public Object getProxy(Object obj){
            MyHandler myHandler = new MyHandler();
            myHandler.setObject(obj);
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
                    obj.getClass().getInterfaces(),myHandler);
        }
    }

    5、最后客戶調用代碼
    package com.test.interceptor;

    /**
    * Created by IntelliJ IDEA.
    * User: Administrator
    * Date: 2009-1-9
    * Time: 17:55:45
    * 客戶調用
    */
    public class Client {
        public static void main(String[] args){
            //目標對象
            TargetInterface target = new Target();
            //代理對象
            MyProxy myProxy = new MyProxy();
            //通過代理對象得到目標對象的代理
            TargetInterface proxy = (TargetInterface)myProxy.getProxy(target);
            //通過目標對象的代理調用目標對象的方法
            proxy.doSomething();
        }
    }

    //輸出:
    //before 
    //do something
    //after

    將自己的理解寫了注釋,現在只理解到這個程度,像
    Proxy.newProxyInstance
    里面是怎么實現的,還沒深入考究
    繼續努力

    posted on 2009-01-13 11:26 閱讀(288) 評論(0)  編輯  收藏 所屬分類: 學習java

    公告

    希望有一天

    我能用鼠標雙擊我的錢包

    然后選中一張100元

    按住“ctrl+c”

    接著不停的“ctrl+v”

    嘻嘻~~~笑醒~~~



    導航

    <2009年1月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(102)

    隨筆檔案(398)

    文章分類

    文章檔案(10)

    有趣網絡

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲伊人久久大香线焦| 亚洲AV无码一区二区三区DV| 亚洲成年网站在线观看| 黄色片在线免费观看| 亚洲午夜精品国产电影在线观看| 四虎在线视频免费观看视频| 亚洲第一福利视频| 久久久久久夜精品精品免费啦| 亚洲五月六月丁香激情| 99久久久国产精品免费蜜臀| 亚洲成av人片不卡无码| 久久WWW色情成人免费观看| 亚洲一卡2卡3卡4卡乱码 在线| 毛片免费视频播放| 亚洲第一成年网站视频| 四虎永久在线精品视频免费观看| 色多多www视频在线观看免费| 久久亚洲高清综合| 免费国产污网站在线观看15| 亚洲av午夜精品无码专区| 四虎影视免费在线| 免费无码又爽又黄又刺激网站 | 我要看免费的毛片| 精品亚洲成a人在线观看| 亚洲精品麻豆av| 免费国产成人午夜在线观看| 亚洲最大在线视频| 日本成人在线免费观看| 一个人免费观看www视频| 亚洲av日韩av高潮潮喷无码| 福利免费观看午夜体检区| 激情婷婷成人亚洲综合| 国产亚洲精AA在线观看SEE | 久9这里精品免费视频| 亚洲国产成a人v在线| 国产一精品一aⅴ一免费| 免费人成在线观看视频高潮| 亚洲乱码一二三四区乱码| 亚洲国产午夜福利在线播放| 久久国产免费观看精品3| 国产精品亚洲精品久久精品|