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

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

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

    Thinking in sky

    --老賀的BLOG

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      21 隨筆 :: 0 文章 :: 35 評(píng)論 :: 0 Trackbacks

             人人都愛Spring加Hibernate。
             但Spring MVC+hibernate的Sample如Appfuse的代碼卻算不得最簡(jiǎn)潔優(yōu)美好讀,如果在自己的項(xiàng)目中繼續(xù)發(fā)揮我們最擅長(zhǎng)的依樣畫葫蘆大法,美好愿望未必會(huì)實(shí)現(xiàn)。
         所以,Pramatic精神不滅。這個(gè)系列就是探尋最適合自己的Spring+Hibernate模式。
        
                                  I-配置文件簡(jiǎn)化

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

    1.1.autowire="byName" /"byType"

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

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

    1.2.<bean>節(jié)點(diǎn)之間抽象公共定義和 Inner Bean

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

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

    2.簡(jiǎn)化后的配置文件

    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語(yǔ)法簡(jiǎn)化

        
    最主要的簡(jiǎn)化是把屬性值和引用bean從子節(jié)點(diǎn)變回了屬性值,對(duì)不喜歡autowire的兄弟比較有用。
     當(dāng)然,如果value要CDATA的時(shí)候還是要用子節(jié)點(diǎn)。另外,list的值可以用空格隔開也比較實(shí)用。

    1.屬性值

     <property name="foo">
         
    <value>fooValue</value>
      
    </property>
      簡(jiǎn)化為
      
    <property name="foo" value="fooValue"/>

    2.引用 bean
    <property name="foo">
       
    <ref bean="fooBean">
    </property>
    簡(jiǎn)化為
    <property name="foo" ref="fooBean"/>

    3. list可以簡(jiǎn)化為空格分開的字符串
    <property name="myFriendList">
      
    <list>
         
    <value>gigix</value>
            
    <value>wuyu</value>
      
    </list>
    </property>
    簡(jiǎn)化為
    <property name="myFriendList" value="gigix wuyu"/>

    4.Spring 2.0來(lái)了
        如果沒什么外力刺激,spring xml 可能就這樣不會(huì)變了。但現(xiàn)在xml成了過街老鼠,被ror的默認(rèn)配置和JDK5的annotation逼得不行,當(dāng)然就要繼續(xù)求變。
        比如有好事者認(rèn)為,節(jié)點(diǎn)名必須以bean打頭,附加一個(gè)屬性id來(lái)表示bean名;屬性值必須搞一個(gè)property子節(jié)點(diǎn),子節(jié)點(diǎn)上有個(gè)屬性name來(lái)表示屬性名,是給機(jī)器看的很不直觀的東西。
    <bean id="customerDAO" class="org.springsideCustomerDAO">
     
    <property name="maxCount" value="10">
    </bean>

    給人看的東西應(yīng)該就寫成
    <customerDAO class="org.springside.CustomerDAO" maxCount="10"/>

    Spring 2.0正用schema實(shí)現(xiàn)類似的語(yǔ)法,具體請(qǐng)看它的JPetStore sample。

    5.使用Spring自帶的DTD使編輯器Smart.
        
        如果沒有用Eclipse的Spring插件,那至少也要使用spring自帶的dtd使XML編輯器smart一些,能夠自動(dòng)為你生成屬性,判斷節(jié)點(diǎn)/屬性名稱有沒有拼錯(cuò)等。

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



    轉(zhuǎn)自http://blog.csdn.net/qking93415981/archive/2007/08/08/1731668.aspx
    posted on 2007-08-24 09:54 老賀 閱讀(509) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE框架
    主站蜘蛛池模板: 夜色阁亚洲一区二区三区| 亚洲精品国产成人99久久| 最近免费中文字幕中文高清| 亚洲AV日韩AV鸥美在线观看| 歪歪漫画在线观看官网免费阅读| 美国毛片亚洲社区在线观看 | 中文字幕免费观看| 亚洲日韩一区二区一无码| 久久久久亚洲AV无码专区桃色| 131美女爱做免费毛片| 黄色大片免费网站| 亚洲婷婷综合色高清在线| 亚洲成年看片在线观看| 亚洲高清免费在线观看| aa毛片免费全部播放完整| 亚洲伊人久久大香线蕉结合| 亚洲综合色自拍一区| 久久电影网午夜鲁丝片免费| 黄色网址在线免费| 在线观看亚洲视频| 亚洲伊人久久大香线焦| 亚洲色WWW成人永久网址| 在线观看人成网站深夜免费| 无码人妻精品中文字幕免费| 免费无码又爽又黄又刺激网站| 亚洲乱码中文字幕小综合| 亚洲精品乱码久久久久久中文字幕| 国产精品无码免费视频二三区| 4399影视免费观看高清直播| free哆拍拍免费永久视频 | 男女男精品网站免费观看| 亚洲人成网站在线观看播放动漫 | 亚洲春色在线观看| 日韩亚洲变态另类中文| 国产免费131美女视频| 国产91免费视频| 99免费在线观看视频| 男女一进一出抽搐免费视频| 国产亚洲精品仙踪林在线播放| 亚洲AV综合色区无码二区爱AV| 亚洲国产综合专区电影在线|