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

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

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

    [摘錄]Jive論壇與Spring框架

    摘錄地址: http://www.codechina.net/resource/html/2006-04/07/150546.html
    Jive論壇與Spring框架
      沒有一種新技術(shù)是憑空誕生的,它的萌芽或胚胎總是或多或少顯現(xiàn)于以前的技術(shù)中,Jive論壇是大家潛心研究的設(shè)計(jì)型應(yīng)用程序,其相關(guān)解析可見本欄的GoF設(shè)計(jì)模式專欄。

      Jive和Spring同為由JavaBeans組成的J2EE?Web系統(tǒng),Jive作為早期成功設(shè)計(jì)案例,其主要架構(gòu)成為大多數(shù)純JavaBeans系統(tǒng)的流行架構(gòu),Spring也不例外。

      Spring框架除了是一種Web層應(yīng)用框架,還提供了訪問EJB層的接口,也有JDBC/ORM的直接操作。Spring框架主要魅力是使用IoC模式和AOP實(shí)現(xiàn)了Jive系統(tǒng)的通用功能,從而使得Jive這樣的純JavaBeans架構(gòu)設(shè)計(jì)可以重用在其它系統(tǒng)中。

      如果你感慨于Jive的設(shè)計(jì)理念,但是又苦于無法重用其設(shè)計(jì)時(shí),Spring框架已經(jīng)幫你實(shí)現(xiàn)了。

      同時(shí)也要注意到:Spring框架類似“雜燴”,它包含了很多J2EE應(yīng)用的工具,類如對(duì)EJB的調(diào)用,它的MVC與Struts?JSF也是相競(jìng)爭(zhēng)的,以純Ioc和AOP設(shè)計(jì)來說,Spring框架也是一種很重的(Heavy、Weight)框架。Spring框架是復(fù)雜的,如果想以Spring替代EJB,那么無疑按了葫蘆浮起瓢。

      將Jive論壇和Spring框架聯(lián)系起來,會(huì)幫助更多理解設(shè)計(jì)模式的程序員迅速掌握最新的設(shè)計(jì)思潮,而不是一種跳躍式的強(qiáng)迫接受。如果你對(duì)Jive有很好的研究,將會(huì)發(fā)現(xiàn)Spring框架是Jive設(shè)計(jì)的更加通用的提升。

      在Jive中,ForumFactory是整個(gè)系統(tǒng)的入口和突破點(diǎn),Jive通過ForumFactory將整個(gè)系統(tǒng)掌控在一個(gè)工廠模式下,這樣做的好處是:便于控制系統(tǒng)的JavaBeans,例如,客戶端通過ForumFactory可創(chuàng)建一個(gè)Forum或訪問一個(gè)Forum,但是是否有權(quán)限訪問呢?如下圖:


      
      ?Jive通過ForumFactory將這種訪問引導(dǎo)到相應(yīng)的Proxy類去,如ForumFactoryProxy類等,通過代理模式對(duì)這些類進(jìn)行權(quán)限控制訪問。這是代理模式的一個(gè)主要用處,但是研讀Jive的代理模式會(huì)發(fā)現(xiàn),要為每個(gè)類實(shí)現(xiàn)一個(gè)Proxy類,非常瑣碎,有沒有更優(yōu)雅的方式呢??當(dāng)然使用動(dòng)態(tài)代理。

      Spring框架基本是抽象上述設(shè)計(jì),Spring框架對(duì)所有JavaBeans的管理也是基于一個(gè)總?cè)肟贐ean?Factory機(jī)制,不同的是,BeanFactory可以?管理所有應(yīng)用的JavaBeans,使用者只要將自己的JavaBeans通過配置文件告訴BeanFactory,那么BeanFactory將會(huì)加載這些JavaBeans,例如:

      <beans>
        <bean?id="exampleBean"?class="eg.ExampleBean"/>
        <bean?id="anotherExample"?class="eg.ExampleBeanTwo"/>
      </beans>

      在Jive中,F(xiàn)orumFactory加載Jive自己的JavaBeans是通過工廠實(shí)現(xiàn)DbForumFactory實(shí)現(xiàn)的,如下代碼,DbForumFactory引發(fā)了后臺(tái)一系列功能實(shí)現(xiàn),這是縱向,而return?new?ForumFactoryProxy這個(gè)語句則類似引來一個(gè)切面,從一個(gè)橫向方面實(shí)現(xiàn)了權(quán)限訪問等功能:

    private?static?String?className?=?"com.jivesoftware.forum.database.DbForumFactory";?

    public?static?ForumFactory?getInstance(Authorization?authorization)?{?
        ?//If?no?valid?authorization?passed?in,?return?null.?
        ?if?(authorization?==?null)?{?
          ?return?null;?
        ?}?
        ?//以下使用了Singleton?單態(tài)模式?
        ?if?(factory?==?null)?{?
          ?synchronized(initLock)?{?
            ?if?(factory?==?null)?{?
                ?......?

        ?    ?try?{?
                  ?//動(dòng)態(tài)轉(zhuǎn)載類?
                  ?Class?c?=?Class.forName(className);?
                  ?factory?=?(ForumFactory)c.newInstance();?
              ?}?
              ?catch?(Exception?e)?{?
                  ?return?null;?
              ?}?
            ?}?
          ?}?
        ?}?

        ?//Now,?返回?proxy.用來限制授權(quán)對(duì)forum的訪問?
        ?return?new?ForumFactoryProxy(authorization,?factory,?                   ?factory.getPermissions(authorization));?
      ?}?
    ?

      既然Spring框架也是通過一個(gè)Bean?Factory加載所有的類,那么它是如何加載的?通過IoC模式,也就是依賴性注射模式。在我以前文章“IoC模式”中,我比較了Factory工廠模式創(chuàng)建對(duì)象和Ioc模式的注射對(duì)象實(shí)現(xiàn)之間的異同,Ioc相比工廠模式則更加解耦了調(diào)用者和被調(diào)用者之間關(guān)系,使用Ioc模式,無需在調(diào)用者代碼中涉及被調(diào)用者的具體實(shí)現(xiàn)。

      Spring框架不但可以向自己容器中注射應(yīng)用者自己定義的JavaBeans(也就是創(chuàng)建它們),而且也可以向這些JavaBeans通過set方法實(shí)現(xiàn)數(shù)據(jù)賦值。

      一旦Bean?Factory運(yùn)行時(shí)刻掌管這些激活的對(duì)象,Spring通過AOP方式,從一個(gè)橫切面為這些JavaBeans提供了權(quán)限訪問、事務(wù)鎖等通用功能的實(shí)現(xiàn),這種實(shí)現(xiàn)是基于動(dòng)態(tài)代理模式,而動(dòng)態(tài)代理是AOP實(shí)現(xiàn)的一種方式。

      前面提到,Jive中使用代理模式實(shí)現(xiàn)權(quán)限訪問,比代理模式更加簡(jiǎn)潔和抽象的是動(dòng)態(tài)代理,使用動(dòng)態(tài)代理將使得調(diào)用者無需指定被調(diào)用者的代理類,這是動(dòng)態(tài)代理區(qū)別代理模式的本質(zhì)。

      動(dòng)態(tài)代理這一優(yōu)勢(shì),又可以體現(xiàn)在另外一句話語上:動(dòng)態(tài)代理攔截了調(diào)用者對(duì)被調(diào)用者的調(diào)用,正是這一功能符合了AOP的攔截器功能,為AOP實(shí)現(xiàn)提供了可能。

      Spring框架使用了動(dòng)態(tài)代理實(shí)現(xiàn)的AOP,正是通過動(dòng)態(tài)代理機(jī)制攔截了外界對(duì)Bean?Factory管理下的對(duì)象的調(diào)用。如下圖:



    ?

      以上只是大體解構(gòu)了Spring的架構(gòu),Spring框架在這個(gè)架構(gòu)下,還順帶了很多其它功能,如Web?MVC、?DAO?JDBC、?DAO?ORM?、以及remote,后者類似我設(shè)計(jì)的EJB方法調(diào)用框架。

      總之,Spring確實(shí)是Ioc和AOP的完美應(yīng)用,Ioc用來裝載JavaBeans,創(chuàng)建這些對(duì)象;AOP用來攔截這些對(duì)象的使用,這才是框架設(shè)計(jì)的必然經(jīng)典方式。


    歡迎大家訪問我的個(gè)人網(wǎng)站 萌萌的IT人

    posted on 2006-04-21 10:30 見酒就暈 閱讀(193) 評(píng)論(0)  編輯  收藏 所屬分類: SPRING

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    我參與的團(tuán)隊(duì)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    BLOG

    FRIENDS

    LIFE

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 阿v视频免费在线观看| 日本亚洲欧洲免费天堂午夜看片女人员 | 激情无码亚洲一区二区三区| 亚洲免费观看在线视频| 亚洲三级电影网址| 2015日韩永久免费视频播放| 亚洲中文字幕不卡无码| 久久嫩草影院免费看夜色| 久久免费香蕉视频| MM131亚洲国产美女久久| 亚洲乱码中文字幕在线| 女人让男人免费桶爽30分钟| 亚洲色成人网站WWW永久四虎| 一个人免费观看在线视频www| 亚洲人成无码网站久久99热国产| 又黄又大的激情视频在线观看免费视频社区在线 | 久久被窝电影亚洲爽爽爽| 高清永久免费观看| 国产成人涩涩涩视频在线观看免费 | 精品亚洲成AV人在线观看| 999zyz**站免费毛片| 亚洲精品一品区二品区三品区| 亚洲第一街区偷拍街拍| 国产伦精品一区二区三区免费下载| 日韩色视频一区二区三区亚洲| 亚洲AV伊人久久青青草原 | 免费看国产曰批40分钟| 一区二区免费在线观看| 国产日产亚洲系列| 波多野结衣免费一区视频| 亚洲色图.com| 性色午夜视频免费男人的天堂| 4480yy私人影院亚洲| 在线成人a毛片免费播放| 一级特黄特色的免费大片视频| 最近中文字幕mv免费高清电影| 亚洲GV天堂GV无码男同| 国产亚洲精品久久久久秋霞 | 日韩精品无码专区免费播放| 亚洲午夜久久久影院| 国产精品久久永久免费|