`
alex8946
  • 浏览: 366358 次
  • 性别: Icon_minigender_1
  • 来自: 广东广州
社区版块
存档分类
最新评论

Spring XML配置十二个最佳实践PART ONE

    博客分类:
  • J2EE
阅读更多

  在这篇文章里,对于Spring XML的配置,我将向你展示12种比较好的实践。其中的一些实践不仅是好的实践,更是必要的实践。除此以外,还有其他因素,例如领域模型的设计,都能影响XML的配置,但是这篇文章重点研究XML配置的易读性和易管理性。

  1。不要使用autowiring

  Spring可以通过类的自省来自动绑定其依赖部分,使得你不必明确指明bean的属性和构造器。Bean的属性可以通过属性名称或类型匹配来实现自动绑定。构造器通过类型匹配来实现自动绑定。你甚至可以指定自动检测自动绑定模式,它可以引导Spring选择一种适当的运行机制。先来看看下面的一个例子:

xml 代码
  1. <bean id="orderService"        class="com.lizjason.spring.OrderService"       
  2.  autowire="byName"/>  
OrderService类的属性名在容器中用于匹配bean实例。自动绑定可以潜在地节省一些打字和减少一些混乱。但是在现实世界
的工程里你不应该使用这种方式,这是因为它牺牲了配置的清晰性和可维护性。许多指南和介绍中大量吹捧自动绑定是
Spring的一种极好的特征而没有提到这一特性所带来的牺牲。依我的观点,这就像Spring中的object-pooling,
它更像是一种为了占据更多市场的商业特征。它对于XML配置文件的小巧化是一个好办法,但实际上也增加了复杂程度,
尤其当你运行有大量类声明的工程时。虽然Spring允许你混合自动绑定和手动绑定,但是这个矛盾会使XML配置更加晦涩难懂。

  2.使用通俗的命名

  这个方式对于Java编码也一样适用。在工程中使用清晰的、描述性的、协调的通俗名称对于开发者理解XML配置是
十分有益的。例如对于bean ID,你可以根据通俗的Java类名来命名它。对于例子中OrderServiceDAO的bean ID
命名为orderServiceDAO。对于大的工程,你可以在bean ID前面加上包名作为前缀。

  3. 使用简洁的形式

  简洁形式避免了冗长,是因为它从子元素中将属性值和参考写到属性中。例如下面的例子:
xml 代码
  1. <bean id="orderService"        class="com.lizjason.spring.OrderService">        
  2.  <property name="companyName">            
  3.   <value>lizjasonvalue>        
  4.  property>        
  5.  <constructor-arg>            
  6.    <ref bean="orderDAO">        
  7.  constructor-arg>    
  8. bean>  
    

  可以使用简洁形式将上述代码重写为:
    
xml 代码
  1. <bean id="orderService"        class="com.lizjason.spring.OrderService">        
  2.  <property name="companyName"            value="lizjason"/>        
  3.  <constructor-arg ref="orderDAO"/>    
  4. bean>  

  简洁形式功能在1.2版本中可以使用。对于<ref local="..."></ref>没有简洁形式。
简洁形式不但可以节约你的打字,而且可以使XML配置文件清晰。它最引人注目的是当在一个配置文件中有大量定义
的类时可以提高易读性。

  4. 对于构造器参数匹配,类型名比序号好。

  当一个构造器含有一个以上的同种类型的参数,或者属性值的标签已经被占用时,Spring允许你使用从0计数的序号来解
决这些会
带来混淆的问题。例如:
xml 代码
  1. <bean id="billingService"        class="com.lizjason.spring.BillingService">       
  2.  <constructor-arg index="0" value="lizjason"/>        
  3.  <constructor-arg index="1" value="100"/>    
  4. bean>  


  像下面这样,利用类型属性来编写会更好一些:
   
xml 代码
  1. <bean id="billingService"        class="com.lizjason.spring.BillingService">        
  2.  <constructor arg type="java.lang.String"            value="lizjason"/>        
  3.  <constructor-arg type="int" value="100"/>    
  4. bean>  

  使用索引可以稍稍减少一些冗长,但是和使用类型属性相比,它还是有容易发生错误的倾向和难于阅读的缺点。
你应该只在构造器参数不明确的时候,才使用索引这一方法。
分享到:
评论

相关推荐

    geek-spring-part-one-01-25

    总结,"geek-spring-part-one-01-25"涵盖了Spring框架的多个重要主题,是学习和掌握Spring的宝贵资源。通过系统学习,开发者不仅可以提升Java EE项目的开发能力,还能更好地适应不断变化的软件开发需求。

    Expert_One-on-One_J2EE_Development_without_EJB中文版 part10

    3. **性能优化**:分析了J2EE应用性能的关键因素,如减少数据库查询、缓存策略、线程池配置等,并提供了最佳实践。 4. **Web服务**:介绍了SOAP和RESTful Web服务的实现,以及它们在J2EE环境中的应用,包括WSDL、...

    geek-spring-part-one-03-04:Spring Framework Web开发基础

    本部分内容主要探讨Spring在Web开发中的基础知识,包括核心概念、配置、MVC模式以及实践应用。 1. **Spring的核心组件** - **IoC(Inversion of Control)容器**:它是Spring的核心,负责管理对象的生命周期和依赖...

    Spring Recipes A Problem-Solution Approach [英文原版]

    One of the first (if not the first) books on the latest Spring 3.x, and the first Spring code Recipes book focused on Spring Web-tier development The Spring framework is growing. It has always been ...

    springmvcfileupload.rar

    &lt;bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"&gt; &lt;!-- one of the properties available; the maximum file size in bytes --&gt; ...

    java面试宝典

    81、public class Something { public int addOne(final int x) { return ++x; }}这个比较明显。 19 83、class Something { int i; public void doSomething() { System.out.println("i = " + i); }} 有什么错呢? 19...

    thymeleaf-extras-eclipse-plugin-2.1-master.zip

    Dialect developers can take advantage of this by including XML help files as part of their dialect JARs. All you need to do is create an XML file that conforms to the schema above, then bundle that ...

    springmvc+ajax+formdata上传图片代码实例

    我们可以在 spring-mvc.xml 配置文件中添加多部分文件上传的配置,代码如下: ```xml &lt;bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"&gt; &lt;!-- one of ...

    restful restful所需要的jar包

    * Integration with Apache FileUpload to support multi-part forms and easily handle large file uploads from browsers * Transformer filter to easily apply XSLT stylesheets on XML representations. It ...

    camel-manual-2.0

    The flexibility of Camel lies in its ability to implement these patterns using a Java-based Domain Specific Language (DSL), a Fluent API, or via XML configuration files, ensuring smart completion in ...

Global site tag (gtag.js) - Google Analytics