[摘錄]Jive論壇與Spring框架

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

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

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

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

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

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

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


            
            ?Jive通過ForumFactory將這種訪問引導到相應的Proxy類去,如ForumFactoryProxy類等,通過代理模式對這些類進行權限控制訪問。這是代理模式的一個主要用處,但是研讀Jive的代理模式會發(fā)現(xiàn),要為每個類實現(xiàn)一個Proxy類,非?,嵥椋袥]有更優(yōu)雅的方式呢??當然使用動態(tài)代理。

            Spring框架基本是抽象上述設計,Spring框架對所有JavaBeans的管理也是基于一個總入口Bean?Factory機制,不同的是,BeanFactory可以?管理所有應用的JavaBeans,使用者只要將自己的JavaBeans通過配置文件告訴BeanFactory,那么BeanFactory將會加載這些JavaBeans,例如:

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

            在Jive中,F(xiàn)orumFactory加載Jive自己的JavaBeans是通過工廠實現(xiàn)DbForumFactory實現(xiàn)的,如下代碼,DbForumFactory引發(fā)了后臺一系列功能實現(xiàn),這是縱向,而return?new?ForumFactoryProxy這個語句則類似引來一個切面,從一個橫向方面實現(xià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?{?
                        ?//動態(tài)轉載類?
                        ?Class?c?=?Class.forName(className);?
                        ?factory?=?(ForumFactory)c.newInstance();?
                    ?}?
                    ?catch?(Exception?e)?{?
                        ?return?null;?
                    ?}?
                  ?}?
                ?}?
              ?}?

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

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

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

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

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

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

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



          ?

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

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


          歡迎大家訪問我的個人網站 萌萌的IT人

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

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          常用鏈接

          留言簿(3)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          BLOG

          FRIENDS

          LIFE

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 肥乡县| 寻甸| 利津县| 望城县| 兰溪市| 靖江市| 云梦县| 嘉黎县| 吉水县| 德令哈市| 额尔古纳市| 建水县| 舟曲县| 大洼县| 霍林郭勒市| 胶南市| 克东县| 锡林浩特市| 绥棱县| 台东市| 长春市| 五家渠市| 正宁县| 济源市| 乐亭县| 钦州市| 锦州市| 措美县| 陈巴尔虎旗| 比如县| 曲阳县| 兴宁市| 临洮县| 明星| 沭阳县| 海门市| 邵阳市| 东安县| 嘉祥县| 安远县| 江门市|