Spring是一个强大的JAVA应用框架,广泛地应用于JAVA的应用程序。为Plain Old Java Objects(POJOs)提供企业级服务。Spring利用依赖注入机制来简化工作,同时提高易测性。Spring beans及依赖,以及beans类所需的服务都在配置文件中进行了详细的说明,这个配置文件是典型的XML格式。但是它既冗长又不实用。对于需要定义大量Spring beans的大工程来说,我们难以阅读和管理它。
在这篇文章里,对于Spring XML的配置,我将向你展示12种比较好的实践。其中的一些实践不仅是好的实践,更是必要的实践。除此以外,还有其他因素,例如领域模型的设计,都能影响XML的配置,但是这篇文章重点研究XML配置的易读性和易管理性。
1。不要使用autowiring
Spring可以通过类的自省来自动绑定其依赖部分,使得你不必明确指明bean的属性和构造器。Bean的属性可以通过属性名称或类型匹配来实现自动绑定。构造器通过类型匹配来实现自动绑定。你甚至可以指定自动检测自动绑定模式,它可以引导Spring选择一种适当的运行机制。先来看看下面的一个例子:
<bean id="orderService" class="com.lizjason.spring.OrderService" autowire="byName"/>
OrderService类的属性名在容器中用于匹配bean实例。自动绑定可以潜在地节省一些打字和减少一些混乱。但是在现实世界的工程里你不应该使用这种方式,这是因为它牺牲了配置的清晰性和可维护性。许多指南和介绍中大量吹捧自动绑定是Spring的一种极好的特征而没有提到这一特性所带来的牺牲。依我的观点,这就像Spring中的object-pooling,它更像是一种为了占据更多市场的商业特征。它对于XML配置文件的小巧化是一个好办法,但实际上也增加了复杂程度,尤其当你运行有大量类声明的工程时。虽然Spring允许你混合自动绑定和手动绑定,但是这个矛盾会使XML配置更加晦涩难懂。
2.使用通俗的命名
这个方式对于Java编码也一样适用。在工程中使用清晰的、描述性的、协调的通俗名称对于开发者理解XML配置是十分有益的。例如对于bean ID,你可以根据通俗的Java类名来命名它。对于例子中OrderServiceDAO的bean ID命名为orderServiceDAO。对于大的工程,你可以在bean ID前面加上包名作为前缀。
3. 使用简洁的形式
简洁形式避免了冗长,是因为它从子元素中将属性值和参考写到属性中。例如下面的例子:
<bean id="orderService"
class="com.lizjason.spring.OrderService">
<property name="companyName">
<value>lizjason</value>
</property>
<constructor-arg>
<ref bean="orderDAO">
</constructor-arg>
</bean>
可以使用简洁形式将上述代码重写为:
<bean id="orderService" class="com.lizjason.spring.OrderService">
<property name="companyName" value="lizjason"/>
<constructor-arg ref="orderDAO"/>
</bean>
简洁形式功能在1.2版本中可以使用。对于<ref local="...">没有简洁形式。
简洁形式不但可以节约你的打字,而且可以使XML配置文件清晰。它最引人注目的是当在一个配置文件中有大量定义的类时可以提高易读性。
4. 对于构造器参数匹配,类型名比序号好。
当一个构造器含有一个以上的同种类型的参数,或者属性值的标签已经被占用时,Spring允许你使用从0计数的序号来解决这些会带来混淆的问题。例如:
<bean id="billingService"
class="com.lizjason.spring.BillingService">
<constructor-arg index="0" value="lizjason"/>
<constructor-arg index="1" value="100"/>
</bean>
像下面这样,利用类型属性来编写会更好一些:
<bean id="billingService" class="com.lizjason.spring.BillingService">
<constructor-arg type="java.lang.String" value="lizjason"/>
<constructor-arg type="int" value="100"/>
</bean>
使用索引可以稍稍减少一些冗长,但是和使用类型属性相比,它还是有容易发生错误的倾向和难于阅读的缺点。你应该只在构造器参数不明确的时候,才使用索引这一方法。
5. 尽可能重用已定义过的bean
Spring提供一种类似继承一样的机制来减少配置信息的复制并简化XML配置。定义一个子类可以从它父类那里继承配置信息,而父类实质上作为子类的一个模板。这就是大工程中所谓的重用。你所需要做的就是在父类bean中设置abstract=true,然后在子bean注明它自己的父类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>
ShippingService类从abstractService类那里继承companyName属性的值——lizjason。如果你没有为一个bean指明类或factory方法,那么这个bean便是抽象的。
6. 尽量使用ApplicationContext来装配定义的bean
像在Ant脚本中的引用一样,Spring的引用对于装配模块化的bean来说是很有用的。例如:
<beans>
<import resource="billingServices.xml"/>
<import resource="shippingServices.xml"/>
<bean id="orderService" class="com.lizjason.spring.OrderService"/>
<beans>
相对于使用import在XML配置中来预装配,通过ApplicationContext来配置这些beans,显得更加灵活。利用ApplicationContext也使得XML配置易于管理。你可以像下面的例子那样在ApplictionContext构造器里布置bean:
String[] serviceResources ={"orderServices.xml","billingServices.xml","shippingServices.xml"};
ApplicationContext orderServiceContext = new ClassPathXmlApplicationContext(serviceResources);
分享到:
相关推荐
### Spring XML配置十二个最佳实践 #### 一、利用自动装配简化配置 在Spring框架中,自动装配(Autowiring)是一种非常实用的功能,它能够帮助我们减少对Bean依赖关系的手动配置工作量。通过设置`autowire`属性,...
本文将详细介绍关于Spring XML配置文件的12个最佳实践,这些实践不仅有助于提高配置文件的可读性和可维护性,还能帮助开发者更好地理解和使用Spring框架。 #### 最佳实践 1. **避免使用自动绑定(Autowiring)** ...
本文将详细解析Spring中XML配置文件的十二个最佳实践,主要关注前六个方法。 1. **避免使用自动绑定(Autowiring)** Spring的自动绑定功能允许框架通过类的自省自动注入依赖。虽然可以减少手动配置,但会导致配置...
教程会深入讨论Spring MVC的工作原理,包括处理器映射、视图解析、模型绑定等关键概念,并通过实际案例展示如何构建一个完整的Web应用。 除此之外,教程还会涵盖Spring 2.0的其他关键模块,如Spring的Messaging支持...
本实践指南将深入探讨Spring配置的最佳实践,旨在帮助开发者优化代码,提高应用的可维护性和可扩展性。 一、XML配置与Java配置的选择 Spring最初是以XML配置为主,但随着版本的更新,Java配置逐渐成为首选。Java...
本文主要探讨了Spring XML配置文件的六个最佳实践,旨在提升代码的可读性、可维护性以及整体项目的结构。以下是这六个方法的详细说明: 1. 避免使用自动绑定(autowiring) 自动绑定允许Spring通过bean类的自省来...
标题 "Spring全注解project示例 (无web.xml配置)" 提供了我们即将探讨的核心主题:一个使用Spring框架,完全依赖注解配置的项目,且没有传统的web.xml部署描述符。这种配置方式在现代Spring应用中非常常见,因为它...
总结而言,本文讨论了Spring框架中XML配置文件的一些最佳实践。这些技巧不仅有助于提高代码的质量,还能帮助开发者更好地组织和管理大型项目的配置信息。通过避免自动装配、使用清晰的命名规则、采用简化格式、合理...
该项目为Spring Cloud Alibaba框架下的Spring Cloud最佳实践设计源码,包含178个文件,涵盖113个Java源文件、37个XML配置文件、18个VM模板文件、6个YAML配置文件、3个备份文件和1个SQL脚本文件,旨在展示代码的艺术...
6. **最佳实践**:在实际开发中,为了保持代码整洁,通常会将不同层次的配置分开,如将Spring的bean定义放在`applicationContext.xml`,SpringMVC的配置放在`servlet-context.xml`,Mybatis的配置放在`mybatis-...
Java EE 设计模式:Spring 企业级开发最佳实践 Java EE 设计模式是指在 Java 企业版(Java Enterprise Edition)中应用的设计模式,旨在提高软件系统的可维护性、可扩展性和可重用性。Spring 是当前最流行的 Java ...
创建一个名为`org.springframework.boot.autoconfigure.EnableAutoConfiguration`的键,并将你的XML配置文件对应的`Configuration`类名作为值添加进去。 3. **自定义BeanDefinitionReader** 你可以创建一个自定义...
CXF环境配置 - jackymin CXF与Spring的集成 log4j的配置使用 Spring XML配置十二个最佳实践WebService开发实例 (Xfire+Spring+Hibernate)
《Spring 2.0核心技术最佳实践源代码》是关于Spring框架深入学习的重要参考资料,尤其针对Spring 2.0版本的核心特性进行了详细的解析和实践。在第十章中,我们将会探讨以下几个关键知识点: 1. **AOP(面向切面编程...
Spring是Java企业级应用程序开发中的一个关键框架,它以依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)为核心理念,极大地简化了Java应用的复杂性。Spring2.0作为重要的...
《Hibernate 3.5与Spring 2.5.5整合的最佳实践》 在现代Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,与Spring框架的结合使用是常见的做法。本篇将深入探讨如何将Hibernate 3.5与Spring...
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效...通过学习和实践这个示例,你不仅可以掌握如何在Spring Boot中使用Spring Batch,还能了解批处理的最佳实践,这对于处理大数据量的应用场景非常有价值。
IoC是Spring框架的核心理念,它将对象的创建和管理从应用程序代码中分离出来,转交给一个专门的容器来处理。这使得代码更加灵活,易于测试和维护。DI是实现IoC的一种具体方式,通过容器来管理对象间的依赖关系,而...
标题中的"spring_2021.7.14.zip"表明这是一份关于Spring框架的资料,时间戳为2021年7月14日,...对于想要学习或复习Spring框架的人来说,这是一个宝贵的资料库,可以系统性地了解和掌握Spring的核心功能和最佳实践。
Spring团队意识到这个问题后,为了摆脱繁琐的XML配置,就推出了Spring Boot. Spring Boot 使用自动配置技术,可以做到零配置XML文件,当然如果想用XML配置Bean,Spring Boot 也保持了兼容。 Spring Boot 无疑如今已经...