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

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

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

    Loading...

    java .net

    開始學(xué)習(xí)struts2(五)

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

    /**
    * Created by IntelliJ IDEA.
    * User: Administrator
    * Date: 2009-1-9
    * Time: 17:37:23
    * 面向接口編程
    * 目標對象的接口
    */
    public interface TargetInterface {
        public void doSomething();
    }
    目標對象實現(xiàn)
    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、攔截器對象-里面包含在調(diào)用目標對象前或后要調(diào)用的方法
    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聯(lián)系在了一起
    */
    public class MyHandler implements InvocationHandler{

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

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

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

        /**
         * 實現(xiàn)InvocationHandler接口的方法
         * @param o 在其上調(diào)用方法的代理實例
         * @param method 對應(yīng)于在代理實例上調(diào)用的接口方法的 Method 實例
         * @param objects 包含傳入代理實例上方法調(diào)用的參數(shù)值的對象數(shù)組
         * @return  從代理實例的方法調(diào)用返回的值
         * @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、最后客戶調(diào)用代碼
    package com.test.interceptor;

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

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

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

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

    公告

    希望有一天

    我能用鼠標雙擊我的錢包

    然后選中一張100元

    按住“ctrl+c”

    接著不停的“ctrl+v”

    嘻嘻~~~笑醒~~~



    導(dǎo)航

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

    統(tǒng)計

    常用鏈接

    留言簿(6)

    隨筆分類(102)

    隨筆檔案(398)

    文章分類

    文章檔案(10)

    有趣網(wǎng)絡(luò)

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产成人精品免费视频软件| 豆国产96在线|亚洲| 亚洲av永久无码精品漫画| 亚洲国产电影av在线网址| 亚洲综合一区国产精品| 亚洲男人天堂2020| 亚洲第一网站男人都懂| 日韩亚洲国产二区| 亚洲女人被黑人巨大进入| AV在线播放日韩亚洲欧| 国产亚洲人成A在线V网站| 成人五级毛片免费播放| 久久久久国产精品免费免费搜索| 7x7x7x免费在线观看| 57pao一国产成永久免费| www视频在线观看免费| 91在线视频免费91| 日韩高清在线高清免费| 亚洲精品无码久久不卡| 亚洲人成精品久久久久| 久久国产精品亚洲综合| 亚洲特级aaaaaa毛片| 亚洲乱码在线观看| 亚洲a一级免费视频| 亚洲欧洲国产视频| 亚洲中文字幕久久精品无码A | 欧亚精品一区三区免费| 日韩免费视频播放| 亚洲人成无码久久电影网站| 亚洲日韩精品无码一区二区三区| 亚洲国产精品人久久| 国产亚洲美女精品久久久| 亚洲av无码乱码国产精品| 亚洲午夜久久久精品电影院| 亚洲天然素人无码专区| 国产高潮流白浆喷水免费A片 | 一级毛片免费视频| 色婷婷7777免费视频在线观看| 日本久久久免费高清| 久久精品国产亚洲综合色| 亚洲一区中文字幕在线观看|