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

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

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

    Vikings

    Jive論壇與Spring框架,經典代碼和架構!

    Jive論壇與Spring框架

    板橋里人 http://www.jdon.com 2004/07/01

      沒有一種新技術是憑空誕生的,它的萌芽或胚胎總是或多或少顯現于以前的技術中,Jive論壇是大家潛心研究的設計型應用程序,其相關解析可見本欄的GoF設計模式專欄。

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

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

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

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

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

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


      
       Jive通過ForumFactory將這種訪問引導到相應的Proxy類去,如ForumFactoryProxy類等,通過代理模式對這些類進行權限控制訪問。這是代理模式的一個主要用處,但是研讀Jive的代理模式會發現,要為每個類實現一個Proxy類,非常瑣碎,有沒有更優雅的方式呢? 當然使用動態代理。

      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中,ForumFactory加載Jive自己的JavaBeans是通過工廠實現DbForumFactory實現的,如下代碼,DbForumFactory引發了后臺一系列功能實現,這是縱向,而return new ForumFactoryProxy這個語句則類似引來一個切面,從一個橫向方面實現了權限訪問等功能:

    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 單態模式
         if (factory == null) {
           synchronized(initLock) {
             if (factory == null) {
                 ......

              try {
                   //動態轉載類
                   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工廠模式創建對象和Ioc模式的注射對象實現之間的異同,Ioc相比工廠模式則更加解耦了調用者和被調用者之間關系,使用Ioc模式,無需在調用者代碼中涉及被調用者的具體實現。

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

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

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

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

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

     

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

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

     

    ZT:
    http://www.zahui.com/html/6/40477.htm

    posted on 2005-05-18 23:46 Vikings 閱讀(391) 評論(0)  編輯  收藏 所屬分類: frame-work

    主站蜘蛛池模板: 乱爱性全过程免费视频| 亚洲av永久中文无码精品| 美女被免费网站91色| 亚洲成a人在线看天堂无码| 亚洲.国产.欧美一区二区三区| 丁香花免费高清视频完整版| 亚洲精品国产情侣av在线| 国产免费毛不卡片| 波多野结衣亚洲一级| 毛片免费全部免费观看| 国产精品亚洲综合五月天| 德国女人一级毛片免费| 春暖花开亚洲性无区一区二区| 国产国产成年年人免费看片| 国产成人久久精品亚洲小说| 亚洲人成色77777在线观看大 | 天天摸夜夜摸成人免费视频| 亚洲色欲色欱wwW在线| 日本a级片免费看| 老司机免费午夜精品视频| 亚洲日韩国产精品乱| 成人性生交大片免费看好| 97se亚洲综合在线| 成人免费a级毛片| 一区二区三区免费视频播放器| 亚洲日韩精品无码一区二区三区| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 亚洲成a人无码亚洲成av无码| 好爽好紧好大的免费视频国产| 永久免费无码日韩视频| 久久久久亚洲精品无码系列| 免费视频爱爱太爽了| 校园亚洲春色另类小说合集| 一本色道久久综合亚洲精品| 亚洲一区二区三区免费在线观看 | 久久精品人成免费| 亚洲精品动漫免费二区| 亚洲午夜福利在线观看| 午夜爱爱免费视频| 在线观看特色大片免费网站| 亚洲日韩乱码中文字幕|