??xml version="1.0" encoding="utf-8" standalone="yes"?>
1。不要用autowiring
Spring 可以通过cȝ自省来自动绑定其依赖部分Q得你不必明确指明bean的属性和构造器。Bean的属性可以通过属性名U或cd匚w来实现自动绑定。构造器通过cd匚w来实现自动绑定。你甚至可以指定自动自动绑定模式,它可以引导Spring选择一U适当的运行机制。先来看看下面的一个例子:
OrderService cȝ属性名在容器中用于匚wbean实例。自动绑定可以潜在地节省一些打字和减少一些乱。但是在现实世界的工E里你不应该使用q种方式Q这是因为它牺牲了配|的清晰性和可维护性。许多指南和介绍中大量吹捧自动绑定是Spring的一U极好的特征而没有提到这一Ҏ所带来的牺牌Ӏ依我的观点Q这像 Spring中的objectQpoolingQ它更像是一Uؓ了占据更多市场的商业特征。它对于XML配置文g的小巧化是一个好办法Q但实际上也增加了复杂程度,其当你q行有大量类声明的工E时。虽然Spring允许你合自动绑定和手动l定Q但是这个矛盾会使XML配置更加晦ӆ难懂?/font>
2.使用通俗的命?/font>
q个方式对于Java~码也一样适用。在工程中用清晰的、描q性的、协调的通俗名称对于开发者理解XML配置是十分有益的。例如对于bean IDQ你可以Ҏ通俗的Javacd来命名它。对于例子中OrderServiceDAO的bean ID命名为orderServiceDAO。对于大的工E,你可以在bean ID前面加上包名作ؓ前缀?/font>
3. 使用z的形式
zŞ式避免了冗长Q是因ؓ它从子元素中属性值和参考写到属性中。例如下面的例子Q?/font>
可以使用zŞ式将上述代码重写为:
zŞ式功能在1.2版本中可以用。对?lt;ref local="...">没有zŞ式?br />zŞ式不但可以节U你的打字,而且可以使XML配置文g清晰。它最引h注目的是当在一个配|文件中有大量定义的cL可以提高易读性?/font>
4. 对于构造器参数匚wQ类型名比序号好?/font>
当一个构造器含有一个以上的同种cd的参敎ͼ或者属性值的标签已经被占用时QSpring允许你用从0计数的序h解决q些会带来淆的问题。例如:
像下面这P利用cd属性来~写会更好一些:
使用索引可以E稍减少一些冗长,但是和用类型属性相比,它还是有Ҏ发生错误的們和难于阅ȝ~点。你应该只在构造器参数不明的时候,才用烦引这一Ҏ?/font>
5. 可能重用已定义q的bean
Spring 提供一U类似承一L机制来减配|信息的复制q简化XML配置。定义一个子cd以从它父c那里扉K|信息,而父cd质上作ؓ子类的一个模ѝ这是大工E中所谓的重用。你所需要做的就是在父类bean中设|abstract=trueQ然后在子bean注明它自q父类bean。例如:
ShippingServicecMabstractServicec那里承companyName属性的值——lizjason。如果你没有Z个bean指明cLfactoryҎQ那么这个bean便是抽象的?/font>
6. 量使用ApplicationContext来装配定义的bean
像在Ant脚本中的引用一PSpring的引用对于装配模块化的bean来说是很有用的。例如:
相对于用import在XML配置中来预装配,通过ApplicationContext来配|这些beansQ显得更加灵zR利?ApplicationContext也得XML配置易于理。你可以像下面的例子那样在ApplictionContext构造器里布|beanQ?br />
7. 利用id作ؓbean的标识符
你可以指定一个id或名U来作ؓbean的标识符。虽然用id不会提高易读性,但是它可以让XML parser对bean的引用有效方面进行更好的验证。如果由于XML IDREF的限制而不能用某个idQ你可以利用names来作为bean的标识符。XML IDREF的限制是id必须以字母开_或者在XML规范中定义的标点W号Q,后面接着字母Q数字,q字P下划U,冒号{。实际上Q遇到XML IDREF限制的问题是很少见的?/font>
8. 在开发阶D用依赖检?/font>
你可以在bean中给依赖验的属性设||而不采用原先默认的空|属性设|例如simpleQobject或allQ以便容器进行依赖检验。当bean的全部的属性(或某cd性)需要被明确讄或自动绑定时Q依赖检验便昑־很有用?/font>
在这个例子里Q容器确保ؓorderService bean讄的属性不是primitives 或?collections。ؓ所有的bean讄默认依赖也是可以的Q但是我们很这样做Q是因ؓ有些bean的属性根本就不必讄?/font>
9. 为每个配|文件加上一个header comment
最好用descriptive id和名U来代替在XML配置文g中的注释。此外,加上一个配|文件header也很有用处,它可以概q文件中所定义的bean。你可以选择描q内容加入description标签中。例如:
使用description标签的一个好处是可以Ҏ地利用工具从标签中选取出descriptionQ的内容Q?/p>
10. 对于M变化Q要与队友积极交?br />当你重构Java代码Ӟ你需要随时更新配|文件ƈ且通知队友。XML配置文g也是代码Q它们是应用E序的至关重要的部分Q但是它们难于阅dl护。大部分旉你既要阅读XML配置文g又要阅读q行中的Java代码?/font>
11. Setter injection优于constructor injection
Spring提供3U类型的依赖注入Q?constructor injection,setter injection, 和method injection。我们一般只用前两种cd?/font>
q个例子中,orderServicecM用的是constructor injectionQ而BillingServicecM用的是setter injection。constructor injection可以保bean不会在一个非法状态下被创建,但是setter injection更加灉|q且更易理Q尤其当cd在很多属性ƈ且其中一些是可选的情况下?/font>
12. 不要滥用依赖注入
作ؓ最后一点,Spring ApplicationContext可以替你创徏Java对象Q但是ƈ不是所有的Java对象都通过依赖注入来创建的。例如,全局的对象不应该通过 ApplicationContext来创建。Spring是一个很的框架Q但是,易L和易管理性而言Q当定义大量bean的时候,ZXML的配|问题就会突出。过度的依赖注入会XML配置变得复杂而且臃肿。记住!使用强大的IDEӞ例如Eclipse和IntelliJQ与XML文g相比Q?Java代码更加易读Q易l护Q易理?/font>
ȝ
对于Spring的配|,XML是很优秀的方式。但当定义大量beanӞZXML配置会变得冗长,W拙。Spring提供了丰富的配置选项。适当地利用其中的选项可以使XML配置清晰Q但是,有些选项Q例如autowiringQ自动绑定)Q往往会降低易L和易维护性。文章中所列D的实例,可以帮助你创建出清晰易读的XML配置文g?br />
文章来源Q?a >http://tb.blog.csdn.net/TrackBack.aspx?PostId=1360429