<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 超越巔峰 閱讀(1356) 評論(0)  編輯  收藏 所屬分類: Java EE

    導航

    統計

    常用鏈接

    留言簿(12)

    隨筆分類(54)

    隨筆檔案(59)

    文章分類(2)

    文章檔案(1)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日韩国产精品乱| 成人免费在线视频| 亚洲熟妇丰满多毛XXXX| 免费看一级一级人妻片| 亚洲Av无码国产情品久久| 国产精品亚洲专区无码牛牛| 午夜一级免费视频| 国产亚洲蜜芽精品久久| 亚洲va中文字幕无码| 国产精品免费久久久久久久久| 亚洲免费在线视频观看| 97碰公开在线观看免费视频| 亚洲人成人77777网站不卡| 免费A级毛片无码A∨| 亚洲欧洲国产视频| 西西大胆无码视频免费| 亚洲第一成年免费网站| 亚洲成av人片不卡无码久久| 草久免费在线观看网站| 久久精品国产亚洲综合色| 99视频精品全部免费观看| 亚洲AV无码一区二区三区人| 国产成人综合久久精品免费| 一级毛片在线播放免费| 久久久久久a亚洲欧洲AV| 亚洲电影在线免费观看| 亚洲AV无码一区二区乱子仑 | 亚洲国产精品无码专区| 99在线视频免费观看| 图图资源网亚洲综合网站| 999在线视频精品免费播放观看| 亚洲日韩VA无码中文字幕| 无码日韩精品一区二区三区免费| 午夜网站免费版在线观看| 337P日本欧洲亚洲大胆精品| 亚洲色大成网站www永久一区| 国产亚洲高清在线精品不卡| 久久亚洲精品无码播放| 91免费人成网站在线观看18| 国产亚洲精品美女2020久久| 亚洲AV无码久久精品色欲|