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

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

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

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    為我學(xué)習(xí) Spring AOP 準(zhǔn)備(Proxy)

    Posted on 2007-10-09 11:13 G_G 閱讀(1124) 評論(2)  編輯  收藏 所屬分類: Spring
    為我準(zhǔn)備學(xué)習(xí)和理解spring
    特留下代碼筆記:
    參考:
    http://dev.csdn.net/author/labile/e70c97cb7f504d35b7b5350e7810cc5a.html
    代碼感想:
    ??? 沒個方法都或多或少需要環(huán)境參數(shù)(如: jdbc的conn ,hbn的session...等等 ),方法結(jié)束后又要關(guān)閉。
    何不用proxy代理并用配置文件的方法來 關(guān),開session 等
    如:以下是我的想法并不是實際可用
    ???
    配置:
    <
    class?name="HelloWorldImpl">
    ?
    <function?name="set*" />

    ? <function?name="getName">
    ??? <proxyBegin artt="name" value="liukaiyi"/>
    ??? ??? //使用Proxy來賦值 name那在實現(xiàn)代碼中就可以不用去關(guān)注象 session 等屬性的開關(guān)了
    ??? ??? //proxy中配置下 , 在實現(xiàn)類中 就使用 就可以了

    ??? <proxyBegin?ref="HelloWorldHandler.doBefter"?args="null"/>
    ??? <proxyEnd?ref="HelloWorldHandler.doAfter"?args="null"/>
    ? </function>

    ? <function?=?name="sayHelloWorld">
    ??? <proxyEnd?ref="HelloWorldHandler.doAfter"?args="null"/>
    ? </function>
    </class>

    代碼:
    HelloWorld hw = (HelloWorld)Factory.getBean("HelloWorldImpl");
    hw.getName();

    結(jié)果是:
    before method invoke!
    劉凱毅
    after method invoke!
    在此 我只是想象,spring 還沒有看,但我認(rèn)為spring 這個著名的框架應(yīng)該在這方面有很好的實現(xiàn)。

    實際代碼:希望spring可以向我上面的方法配置好用來取代下面的實際代碼 ^_^
    package?test.proxy;

    import?java.lang.reflect.InvocationHandler;
    import?java.lang.reflect.Method;
    import?java.lang.reflect.Proxy;

    import?junit.framework.TestCase;

    public?class?TestProxy?extends?TestCase?{
    ????
    ????
    protected?void?setUp()?throws?Exception?{
    ????????
    super.setUp();
    ????}
    ????
    ????
    public?void?testProxy(){
    ?????????????HelloWorld?hw?
    =?new?HelloWorldImpl();???????????
    ???????????????????????InvocationHandler?handler?
    =?new?HelloWorldHandler(hw);??????????
    ???????????????????????HelloWorld?proxy?
    =?(HelloWorld)?Proxy.newProxyInstance(???
    ?????????????????????????????????????hw.getClass().getClassLoader(),???
    ?????????????????????????????????????hw.getClass().getInterfaces(),???
    ?????????????????????????????????????handler);???
    ???????????????????????proxy.sayHelloWorld();
    ???????????????????????
    ???????????????????????System.out.println();
    ???????????????????????proxy.setName(
    "liukaiyi");
    ???????????????????????proxy.getName();
    ????}
    ????
    }

    interface?HelloWorld?{???
    ????
    void?sayHelloWorld()?;???
    ????
    void?getName();
    ????
    void?setName(String?name);
    }

    class?HelloWorldImpl?implements?HelloWorld?{???
    ????
    private?String?name?=?"";
    ????
    public?void?setName(String?name)?{
    ????????
    this.name?=?name;
    ????}

    ????
    public?void?sayHelloWorld()?{???
    ????????System.out.println(
    "Hello?World!");??????????????
    ????}

    ????
    public?void?getName()?{
    ????????System.out.println(
    this.name);
    ????}???
    }

    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?
    =?null?;??????????????
    ???????????????????String?meName?
    =?method.getName();
    ???????????????????
    if(meName.indexOf("set")>-1?){
    ???????????????????????
    return?method.invoke(this.objOriginal?,args);???
    ???????????????????}
    ???????????????????
    if(?meName.equals("getName")?){
    ????????????????????
    //方法調(diào)用之前???
    ???????????????????????????doBefore();?//仿佛是AOP的影子,呵呵???
    ???????????????????}
    ?????????????????????
    //調(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!");???
    ????????????}???
    ?????}???


    結(jié)果:
    Hello World!
    after method invoke!

    before method invoke!
    劉凱毅
    after method invoke!


    評論

    # re: 為我學(xué)習(xí) Spring AOP 準(zhǔn)備(Proxy)  回復(fù)  更多評論   

    2007-10-09 12:05 by 千里冰封
    呵呵,用代理還是比較好玩的

    # re: 為我學(xué)習(xí) Spring AOP 準(zhǔn)備(Proxy)  回復(fù)  更多評論   

    2008-03-13 18:14 by bless
    要是很多不同的被代理類的函數(shù)返回值、里面的判斷條件等等的好多種,很復(fù)雜,那invoke里豈不是要寫很多判斷條件,那時候怎么辦啊。
    主站蜘蛛池模板: WWW亚洲色大成网络.COM| 97碰公开在线观看免费视频| 日韩免费一级毛片| 亚洲一区中文字幕在线观看| 4399影视免费观看高清直播| 色噜噜综合亚洲av中文无码| 久久亚洲免费视频| 亚洲国产精品自在线一区二区| 久久久久久久99精品免费观看| 国产亚洲A∨片在线观看| a级片免费在线播放| 亚洲国产精品婷婷久久| 97在线视频免费播放| 亚洲AV永久无码精品一百度影院 | 亚洲国产亚洲综合在线尤物| 91精品视频在线免费观看| 亚洲毛片基地日韩毛片基地| 免费精品国偷自产在线在线| 亚洲熟伦熟女专区hd高清| 国产无遮挡裸体免费视频 | 中文字幕无码毛片免费看| 亚洲乱色熟女一区二区三区丝袜| 精品免费tv久久久久久久| 91亚洲导航深夜福利| 九九九精品成人免费视频| 99亚洲精品卡2卡三卡4卡2卡| 亚洲国产日韩成人综合天堂| 成在人线av无码免费高潮水| 亚洲AV区无码字幕中文色| 无遮免费网站在线入口| 国产综合激情在线亚洲第一页 | 国产亚洲中文日本不卡二区| 亚洲AV无码专区日韩| 免费福利在线视频| 亚洲 欧洲 视频 伦小说| gogo全球高清大胆亚洲| 亚洲精品免费视频| 亚洲精品无码人妻无码| 亚洲精品狼友在线播放| 成人片黄网站色大片免费| GOGOGO免费观看国语|