<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 閱讀(296) 評論(0)  編輯  收藏 所屬分類: 學習java

    公告

    希望有一天

    我能用鼠標雙擊我的錢包

    然后選中一張100元

    按住“ctrl+c”

    接著不停的“ctrl+v”

    嘻嘻~~~笑醒~~~



    導航

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

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(102)

    隨筆檔案(398)

    文章分類

    文章檔案(10)

    有趣網絡

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲乱码中文论理电影| 亚洲人成人无码网www电影首页| 亚洲AV无码专区亚洲AV伊甸园| 一级毛片a女人刺激视频免费| 又黄又大又爽免费视频| 免费观看四虎精品成人| 四虎精品亚洲一区二区三区 | 亚洲成a人片在线网站| 最刺激黄a大片免费网站| 亚洲欧洲高清有无| 特级做A爰片毛片免费69| 亚洲日本成本人观看| 国产一区二区三区免费视频| 黄网站色视频免费看无下截| 久久精品国产亚洲一区二区三区| 黄床大片免费30分钟国产精品 | 三上悠亚在线观看免费| 亚洲AV日韩精品久久久久久| 18禁止看的免费污网站| 亚洲精品456人成在线| 免费国产综合视频在线看| 国产一级婬片A视频免费观看| 亚洲国产精品久久| 毛片A级毛片免费播放| 野花视频在线官网免费1| 久久亚洲精品无码| 女人18毛片免费观看| jizz在线免费观看| 亚洲欧洲视频在线观看| 又大又硬又爽免费视频| 无码精品国产一区二区三区免费 | 污污视频网站免费观看| 亚洲成AV人片一区二区| 国产v精品成人免费视频400条| 国产亚洲Av综合人人澡精品| 亚洲大尺度无码无码专区| 扒开双腿猛进入爽爽免费视频 | 免费精品视频在线| 亚洲色图国产精品| 又黄又爽无遮挡免费视频| 在线看片免费人成视久网|