posts - 20,  comments - 2,  trackbacks - 0

          作者: tianshi0253  鏈接:http://tianshi0253.javaeye.com/blog/202859  發表時間: 2008年06月13日

          聲明:本文系JavaEye網站發布的原創博客文章,未經作者書面許可,嚴禁任何網站轉載本文,否則必將追究法律責任!

          作者:江南白衣 
             
                                     

              人人都愛Spring加Hibernate。
              但Spring MVC+hibernate的Sample如Appfuse的代碼卻算不得最簡潔優美好讀,如果在自己的項目中繼續發揮我們最擅長的依樣畫葫蘆大法,美好愿望未必會實現。
               所以,Pramatic精神不滅。這個系列就是探尋最適合自己的Spring+Hibernate模式。
              
                                        I-配置文件簡化

               我厭倦一切配置文件繁重的框架。
               最好的情況是,框架提供極端靈活復雜的配置方式,但只在你需要的時候
           
               Spring提供了三種可能來簡化XML。隨著國內用戶水平的提高,這些基本的簡化技巧大家都已掌握。
               大家可以直接看第3,第4點--Spring 1.2, Spring 2.0的后繼改進。

          1.1.autowire="byName" /"byType"

               假設Controller有一個屬性名為customerDAO,Spring就會在配置文件里查找有沒有名字為CustomerDAO的bean, 自動為Controller注入。
               如果bean有兩個屬性,一個想默認注入,一個想自定義,只要設定了autowire,然后顯式的聲明那個想自定義的,就可以達到要求。這就應了需求,在需要特別配置的時候就提供配置,否則給我一個默認注入。

               還有一個更懶的地方,在最最根部的<beans>節點寫一句default-autovwrie="byName",可以讓文件里的所有bean 都默認autowrie。
              不過Rod認為開發期可以這樣,但Production Server上不應該使用Autowire。而我覺得那些自定義一次的地方比如TranscationManager應該詳細定義,而Dao,Controller這種大量重復定義的bean就可以偷點懶了。

          1.2.<bean>節點之間抽象公共定義和 Inner Bean

              這太方便懶人了,想不到兩個獨立的XML節點都可以玩繼承和派生,子節點擁有父節點的全部屬性。
              最好用的地方就是那個Transtion Proxy的定義。先定義一個又長又冗的父類,然后用子類去繼承它。
             
              另外,還有一個Inner Bean的機制,可以把DAO寫成Proxy的內部類。為什么要寫成內部類?為了讓Proxy冒名頂替它去讓Controller Autowire。(詳見后面的示例)

          1.3. 寬松的配置, To XML or Not to XML 
              據說Spring比Struts的配置寬松了很多,這就給人把東西從配置文件中撤回原碼中的機會。
              不贊成什么都往配置文件里曬,造成了Rich Information的配置文件,修改或者查看的時候,要同時打開配置文件和原碼才能清楚一切。
              而我希望配置文件就集中做一些整體的配置,還有框架必須的、無需管理的冗余代碼。而一些細節的變化不大的配置和邏輯,就盡量別往里塞了。因此,Success/Fail View 的配置,不建議放在里面。

          2.簡化后的配置文件

          1.Controller只剩下一句

          <bean name="customerController" class="org.springside.bookstore.web.CustomerController" autowire="byName"/>

           

          2.DAO也只剩一句

          <bean id="customerDAO" class="org.springside.bookstore.dao.CustomerDao"/>

           

          3.Service類只剩下5行

            <bean id="customerManager" parent="baseTxService">
                  <property name="target">
                      <bean class="org.springside.bookstore.service.CustomerManager"/>
                  </property>
              </bean>

           

          3.Spring 1.2后xml語法簡化

           
          最主要的簡化是把屬性值和引用bean從子節點變回了屬性值,對不喜歡autowire的兄弟比較有用。
           當然,如果value要CDATA的時候還是要用子節點。另外,list的值可以用空格隔開也比較實用。

          1.屬性值

            <property name="foo">
            <value>fooValue</value>
            </property>
            簡化為
            <property name="foo" value="fooValue"/>
           
          2.引用 bean
          <property name="foo">
          <ref bean="fooBean">
          </property>
          簡化為
          <property name="foo" ref="fooBean"/>
           

          3. list可以簡化為空格分開的字符串
            
          <property name="myFriendList">
           <list>
             <value>gigix</value>
                  <value>wuyu</value>
           </list>
          </property>
          簡化為
          <property name="myFriendList" value="gigix wuyu"/>
              
            
          4.Spring 2.0來了
             如果沒什么外力刺激,spring xml 可能就這樣不會變了。但現在xml成了過街老鼠,被ror的默認配置和JDK5的annotation逼得不行,當然就要繼續求變。
             比如有好事者認為,節點名必須以bean打頭,附加一個屬性id來表示bean名;屬性值必須搞一個property子節點,子節點上有個屬性name來表示屬性名,是給機器看的很不直觀的東西。
          <bean id="customerDAO" class="org.springside...CustomerDAO">
           <property name="maxCount" value="10">
          </bean>
           
          給人看的東西應該就寫成
          <customerDAO class="org.springside....CustomerDAO" maxCount="10"/>
           

          Spring 2.0正用schema實現類似的語法,具體請看它的JPetStore sample。

          5.使用Spring自帶的DTD使編輯器Smart.

              如果沒有用Eclipse的Spring插件,那至少也要使用spring自帶的dtd使XML編輯器smart一些,能夠自動為你生成屬性,判斷節點/屬性名稱有沒有拼錯等。

          6.還有更變態的簡化配置方法
              比如autoproxy,不過我覺得更簡化就不可控了,所以沒有采用。

           

          相關文章:

          簡化Spring(1)--配置文件

          簡化Spring(2)--Model層

          簡化Spring(3)--Controller層

          簡化Spring(4)--View層

           


          本文的討論也很精彩,瀏覽討論>>


          JavaEye推薦




          文章來源:http://tianshi0253.javaeye.com/blog/202859
          posted on 2008-06-22 00:10 姚文超 閱讀(550) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 齐齐哈尔市| 太原市| 额敏县| 大丰市| 长兴县| 仲巴县| 西林县| 铁岭市| 慈溪市| 乳源| 启东市| 南昌县| 昌宁县| 靖边县| 普兰县| 勐海县| 永善县| 中江县| 丽水市| 贵阳市| 鹤山市| 安化县| 沭阳县| 恭城| 紫金县| 东乌珠穆沁旗| 子洲县| 托克托县| 龙岩市| 无极县| 马龙县| 汉川市| 越西县| 深水埗区| 闽侯县| 余干县| 日照市| 宜章县| 资兴市| 木兰县| 赤峰市|