簡化Spring配置文件
配置文件簡化
我厭倦一切配置文件繁重的框架。
***的情況是,框架提供極端靈活復(fù)雜的配置方式,但只在你需要的時候。
Spring提供了三種可能來簡化XML。隨著國內(nèi)用戶水平的提高,這些基本的簡化技巧大家都已掌握。
1.autowire="byName" /"byType"
假設(shè)Controller有一個屬性名為customerDAO, 在Spring配置文件里查找有沒有名字為CustomerDAO的bean, 自動為Controller注入。如果bean有兩個屬性,一個想默認(rèn)注入,一個想自定義,只要設(shè)定了autowire,然后顯式的聲明那個想自定義的,就可以達(dá)到要求。這就應(yīng)了需求,在需要特別配置的時候就提供配置,否則給我一個默認(rèn)注入。
還有一個更懶的地方,在最最根部的<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)懶了。
2.<bean>節(jié)點(diǎn)之間抽象公共定義和 Inner Bean
這太方便懶人了,想不到兩個獨(dú)立的XML節(jié)點(diǎn)都可以玩繼承和派生,子節(jié)點(diǎn)擁有父節(jié)點(diǎn)的全部屬性。***用的地方就是那個Transtion Proxy的定義。先定義一個又長又冗的父類,然后用子類去繼承它。
另外,還有一個Inner Bean的機(jī)制,可以把DAO寫成Proxy的內(nèi)部類。為什么要寫成內(nèi)部類?為了讓Proxy冒名頂替它去讓Controller Autowire。(詳見后面的示例)
3. 寬松的配置, To XML or Not to XML
據(jù)說Spring比Struts的配置寬松了很多,這就給人把東西從配置文件中撤回原碼中的機(jī)會。不贊成什么都往配置文件里曬,造成了Rich Information的配置文件,修改或者查看的時候,要同時打開Spring配置文件和原碼才能清楚一切。而我希望配置文件就集中做一些整體的配置,還有框架必須的、無需管理的冗余代碼。而一些細(xì)節(jié)的變化不大的配置和邏輯,就盡量別往里塞了。因此,Success/Fail View 的配置,不建議放在里面。
簡化后的Spring配置文件
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>
【編輯推薦】