一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

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

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

1.1.autowire="byName" /"byType"

     假設(shè)Controller有一個(gè)屬性名為customerDAO,Spring就會在配置文件里查找有沒有名字為CustomerDAO的bean, 自動為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è)又長又冗的父類,然后用子類去繼承它。
   
    另外,還有一個(gè)Inner Bean的機(jī)制,可以把DAO寫成Proxy的內(nèi)部類。為什么要寫成內(nèi)部類?為了讓Proxy冒名頂替它去讓Controller Autowire。(詳見后面的示例)

1.3. 寬松的配置, To XML or Not to XML 
    據(jù)說Spring比Struts的配置寬松了很多,這就給人把東西從配置文件中撤回原碼中的機(jī)會。
    不贊成什么都往配置文件里曬,造成了Rich Information的配置文件,修改或者查看的時(shí)候,要同時(shí)打開配置文件和原碼才能清楚一切。
    而我希望配置文件就集中做一些整體的配置,還有框架必須的、無需管理的冗余代碼。而一些細(xì)節(jié)的變化不大的配置和邏輯,就盡量別往里塞了。因此,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從子節(jié)點(diǎn)變回了屬性值,對不喜歡autowire的兄弟比較有用。
 當(dāng)然,如果value要CDATA的時(shí)候還是要用子節(jié)點(diǎn)。另外,list的值可以用空格隔開也比較實(shí)用。

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

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

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

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

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

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

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产av一区二区三区麻豆| 国产精品福利一级久久| 亚洲中文字幕视频在线观看| 少妇激情在线免费观看| 精品少妇一区二区视频| 亚洲欧美日韩中文字幕二欧美 | 国内精品伊人久久久av高清| 色丁香一区二区黑人巨大| 中国一区二区三区不卡| 91人妻人澡人人爽人人精品| 九九热这里有精品20| 亚洲精品一区二区三区免| 欧美日韩欧美国产另类| 国产精品久久精品国产| 亚洲精品中文字幕熟女| 久久国产亚洲精品赲碰热| 久久夜色精品国产高清不卡| 亚洲高清中文字幕一区二三区| 午夜精品久久久免费视频| 国产乱淫av一区二区三区| 国产精品流白浆无遮挡| 亚洲综合天堂一二三区| 欧美激情床戏一区二区三| 免费在线观看欧美喷水黄片| 高清一区二区三区大伊香蕉| 欧美精品久久男人的天堂| 麻豆国产精品一区二区三区| 91人妻丝袜一区二区三区| 中文字日产幕码三区国产| 欧美乱码精品一区二区三| 国产精品激情在线观看| 日韩和欧美的一区二区三区| 五月婷婷综合缴情六月| 三级理论午夜福利在线看| 欧美国产在线观看精品| 五月天六月激情联盟网| 夫妻性生活真人动作视频| 国产肥妇一区二区熟女精品| 欧美日韩一区二区三区色拉拉| 99视频精品免费视频| 欧美国产极品一区二区|