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

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

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

    J2EE之巔

     

    如何在程序中直接使用Spring的工具類

    Spring中存在大量的工具類,如:RMI相關的。Spring所提供的 RMI的支持大大簡化了RMI的開發難度,不過通常我們都是采用配置的方式,通過標準的spring bean來使用它們,這樣雖然簡化了開發,但是也限制了一些靈活性。因為bean的屬性都是在配置時設定的(如RMI客戶端中的服務的URL),而有時我 們需要在運行時生成這些屬性,這時其實只要我們直接使用這些工具類就可以了。
    要在程序中直接使用RmiProxyFactoryBean,我們就必須了解spring是如何使用這個類為我們生成客戶端代理的,然后在程序中使用與spring相同的調用方式。
    RmiProxyFactoryBean是一個工廠類,平時我們通過spring獲得的并不是這個工廠類的實例,而是用這個工廠類創建的proxy的實例,這個類實現了spring中標準的FactoryBean接口。FactoryBean接口中定義了三個方法:
    getObject()
               Return an instance (possibly shared or independent) of the object managed by this factory.
    getObjectType()
               Return the type of object that this FactoryBean creates, or
    null if not known in advance.
    boolean
    isSingleton()
               Is the bean managed by this factory a singleton or a prototype?
    我們通過getBean獲取這類工廠Bean(實現了FactoryBean接口的Bean)時,spring并不會返回工廠類的實例,而是調用工廠類的getObject方法并把方法的返回值返回給我們。
    這樣你就明白了原來我們獲得的RMI的Proxy是通過RmiProxyFactoryBean的getObject方法生成的。
    這時你一定認為下面的程序就可以搞定了:
                  …
    RmiProxyFactoryBean proxy=new RmiProxyFactoryBean();           
                  proxy.setServiceInterface(Calculator.class);
                  proxy.setServiceUrl(url);
                  Calculator client=(Calculator)proxy.getObject();         
                  System.out.println(client.add(1,1));
                  …
    運行程序你會發現上面這段程序并不成功,程序會拋出java.lang.NullPointerException異常。
    問題在哪里呢?研究一下你會發現RmiProxyFactoryBean還實現了spring的InitializingBean接口,接口中包含一個方法afterPropertiesSet(),在所有屬性注入完成后spring會調用這個方法,因此上面的程序并沒有完全正確的模擬spring的調用過程。
    修改代碼:
    RmiProxyFactoryBean proxy=new RmiProxyFactoryBean();           
                  proxy.setServiceInterface(Calculator.class);
                  proxy.setServiceUrl(url);
                  proxy.afterPropertiesSet();
                  Calculator client=(Calculator)proxy.getObject();         
                  System.out.println(client.add(1,1));
                  …
    這次終于成功了!

    最后,此例告訴大家有時我們可以直接調用spring中的工具類,來完成我們的特殊需求,此時要注意的是正確模擬spring的對bean創建和調用過程。

    posted on 2007-12-26 17:38 超越巔峰 閱讀(1350) 評論(0)  編輯  收藏 所屬分類: Java EE

    導航

    統計

    常用鏈接

    留言簿(12)

    隨筆分類(54)

    隨筆檔案(59)

    文章分類(2)

    文章檔案(1)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV无码成人精品区天堂| 国产色爽免费视频| 久久亚洲精品AB无码播放| 亚洲高清免费视频| 亚洲视频人成在线播放| 精品成人一区二区三区免费视频| 亚洲日韩激情无码一区| 曰批全过程免费视频观看免费软件| 又黄又爽又成人免费视频| 七色永久性tv网站免费看| 亚洲AV永久无码精品| 午夜国产大片免费观看| 亚洲七七久久精品中文国产| 亚洲一卡2卡4卡5卡6卡在线99 | heyzo亚洲精品日韩| 四虎影视在线永久免费观看| 亚洲AV无码AV日韩AV网站| 99视频在线免费看| 亚洲毛片基地日韩毛片基地| 嫖丰满老熟妇AAAA片免费看| 亚洲s码欧洲m码吹潮| 亚洲美日韩Av中文字幕无码久久久妻妇| 中文字幕成人免费高清在线视频| 亚洲综合AV在线在线播放| 99久久精品国产免费| 亚洲色精品VR一区区三区| 四虎免费久久影院| 一级毛片免费毛片一级毛片免费| 国产精品亚洲成在人线| 一级看片免费视频| 伊人久久综在合线亚洲2019| 玖玖在线免费视频| 亚洲国产熟亚洲女视频| 亚洲国产天堂久久久久久| 67194成手机免费观看| 国产精品亚洲专一区二区三区| 精品久久久久久亚洲| 亚洲精华液一二三产区| 亚洲综合日韩久久成人AV| 2021久久精品免费观看| 国产免费久久久久久无码|