??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品在线a,亚洲男人天堂,青青草免费在线http://www.aygfsteel.com/toez/category/16787.htmlzh-cnWed, 28 Feb 2007 03:35:00 GMTWed, 28 Feb 2007 03:35:00 GMT60Spring XML 配置12最佛_?[转]http://www.aygfsteel.com/toez/articles/78620.htmlToezToezThu, 02 Nov 2006 03:10:00 GMThttp://www.aygfsteel.com/toez/articles/78620.htmlhttp://www.aygfsteel.com/toez/comments/78620.htmlhttp://www.aygfsteel.com/toez/articles/78620.html#Feedback0http://www.aygfsteel.com/toez/comments/commentRss/78620.htmlhttp://www.aygfsteel.com/toez/services/trackbacks/78620.html 在这文章里Q对于Spring XML的配|,我将向你展示12U比较好的实c其中的一些实践不仅是好的实践Q更是必要的实践。除此以外,q有其他因素Q例如领域模型的设计Q都能媄响XML的配|,但是q篇文章重点研究XML配置的易L和易管理性?/font>

1。不要用autowiring

Spring 可以通过cȝ自省来自动绑定其依赖部分Q得你不必明确指明bean的属性和构造器。Bean的属性可以通过属性名U或cd匚w来实现自动绑定。构造器通过cd匚w来实现自动绑定。你甚至可以指定自动自动绑定模式,它可以引导Spring选择一U适当的运行机制。先来看看下面的一个例子:

< bean  id ="orderService"  class ="com.lizjason.spring.OrderService"  autowire ="byName" />

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>

< bean  id ="orderService"  class ="com.lizjason.spring.OrderService" >
   
< property  name ="companyName" >
      
< value > lizjason </ value >
   
</ property >
   
< constructor-arg >
      
< ref  bean ="orderDAO" >
   
</ constructor-arg >
</ bean >

可以使用zŞ式将上述代码重写为:

< bean  id ="orderService"  class ="com.lizjason.spring.OrderService" >
    
< property  name ="companyName"  value ="lizjason" />
    
< constructor-arg  ref ="orderDAO" />
</ bean >

zŞ式功能在1.2版本中可以用。对?lt;ref local="...">没有zŞ式?br />zŞ式不但可以节U你的打字,而且可以使XML配置文g清晰。它最引h注目的是当在一个配|文件中有大量定义的cL可以提高易读性?/font>

4. 对于构造器参数匚wQ类型名比序号好?/font>

当一个构造器含有一个以上的同种cd的参敎ͼ或者属性值的标签已经被占用时QSpring允许你用从0计数的序h解决q些会带来؜淆的问题。例如:

< bean  id ="billingService"  class ="com.lizjason.spring.BillingService" >   
    
< constructor-arg  index ="0"  value ="lizjason" />
    
< constructor-arg  index ="1"  value ="100" />
</ bean >

像下面这P利用cd属性来~写会更好一些:

< bean  id ="billingService"   class ="com.lizjason.spring.BillingService" >        
    
< constructor-arg  type ="java.lang.String"  value ="lizjason" />        
    
< constructor-arg  type ="int"  value ="100" />    
</ bean >

使用索引可以E稍减少一些冗长,但是和用类型属性相比,它还是有Ҏ发生错误的們֐和难于阅ȝ~点。你应该只在构造器参数不明的时候,才用烦引这一Ҏ?/font>

5. 可能重用已定义q的bean

Spring 提供一U类似承一L机制来减配|信息的复制q简化XML配置。定义一个子cd以从它父c那里扉K|信息,而父cd质上作ؓ子类的一个模ѝ这是大工E中所谓的重用。你所需要做的就是在父类bean中设|abstract=trueQ然后在子bean注明它自q父类bean。例如:

< bean  id ="abstractService"  abstract ="true"  class ="com.lizjason.spring.AbstractService" >
    
< property  name ="companyName"   value ="lizjason" />    
</ bean >    
< bean  id ="shippingService"  parent ="abstractService"  class ="com.lizjason.spring.ShippingService" >        
    
< property  name ="shippedBy"  value ="lizjason" />    
</ bean >

ShippingServicecMabstractServicec那里承companyName属性的值——lizjason。如果你没有Z个bean指明cLfactoryҎQ那么这个bean便是抽象的?/font>

6. 量使用ApplicationContext来装配定义的bean

像在Ant脚本中的引用一PSpring的引用对于装配模块化的bean来说是很有用的。例如:

< beans >
    
< import  resource ="billingServices.xml" />
    
< import  resource ="shippingServices.xml" />
    
< bean  id ="orderService"   class ="com.lizjason.spring.OrderService" />
< beans >

相对于用import在XML配置中来预装配,通过ApplicationContext来配|这些beansQ显得更加灵zR利?ApplicationContext也得XML配置易于理。你可以像下面的例子那样在ApplictionContext构造器里布|beanQ?br />

String[] serviceResources  =  {
      " orderServices.xml " ,
      " billingServices.xml " ,
      " shippingServices.xml " };

ApplicationContext orderServiceContext 
=
      new  ClassPathXmlApplicationContext(serviceResources);

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>

< bean  id ="orderService"  class ="com.lizjason.spring.OrderService"  dependency-check ="objects" >        
    
< property  name ="companyName"  value ="lizjason" />        
    
< constructor-arg  ref ="orderDAO" />    
</ bean >

在这个例子里Q容器确保ؓorderService bean讄的属性不是primitives 或?collections。ؓ所有的bean讄默认依赖也是可以的Q但是我们很这样做Q是因ؓ有些bean的属性根本就不必讄?/font>

9. 为每个配|文件加上一个header comment

最好用descriptive id和名U来代替在XML配置文g中的注释。此外,加上一个配|文件header也很有用处,它可以概q文件中所定义的bean。你可以选择描q内容加入description标签中。例如:

< beans >        
    
< description >
    This file defines billing service related beans and it depends on baseServices.xml,which provides           
    service bean templates       
    
</ description >        
       
</ beans >

使用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>

< bean  id ="orderService"   class ="com.lizjason.spring.OrderService" >
    
< constructor-arg  ref ="orderDAO" />    
</ bean >
   
< bean  id ="billingService"  class ="com.lizjason.spring.BillingService" >
       
    
< property  name ="billingDAO"  ref ="billingDAO" >

</ bean >


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



Toez 2006-11-02 11:10 发表评论
]]>
վ֩ģ壺 ˫| | | | | | ˹| | ԭ| Ϫ| | | | | | | ˳| ʩ| Զ| | | ɽ| ͼ| | Ϻӿ| | | ͷ| | ̨| ɾ| ɫ| | | | | Դ| | ʡ| | |