Spring XML配置的12个技巧(1)(转)

Spring是一个强有力的java程序框架,其被广泛应用于java的程序中。它用POJO提供了企业级服务。Spring利用依赖注入可以获得简单而有效的测试能力。Spring beans,依赖关系,以及服务所需要的bean都将在配置文件中予以描述,配置文件一般采用XML格式。然而XML配置文件冗长而不易使用,在你进行一个使用了大量bean的大项目中它将变得难以阅读和控制。

在这篇文章中我将给你展示12种的有关Spring XML配置文件的最佳技巧。它们中的一些具有更多的实际意义,而不仅是最好的技巧。请注意另外一些因素,例如域模型的设计,会影响到XML配置,但是这篇文章更关注于XML配置的可读性和可操控性。

1. 避免使用自动装配

Spring可以通过bean类的自省来实现自动装配依赖,这样的话你就不必明确地描述bean的属性或者构造函数的参数。根据属性名称活匹配类型,bean属性可以自动进行装配。而构造函数可以根据匹配类型自动装配。你甚至可以设置自动装配进行自动侦测,这样Spring替你就会选择一个合适的机制。请看下面的例子:

<bean id="orderService"

class="com.lizjason.spring.OrderService"

autowire="byName"/>

OrderService类的属性名被用来和容器中的一个bean实例进行匹配。自动装配会默默的保存一些类型信息并降低混乱。然而,由于它会牺牲掉这种配置的直观性和可维护性,你在实际的项目中将不会用到它。许多指南和陈述材料都把它吹捧为Spring的一个非常cool的特性,而没有提到它的这个缺点。依我之见,就像Spring的对象池一样,它更多了一些商业味道。它看起来好像可以使XML配置文件更精简一些,但实际上却增加其复杂性,尤其是在你的较大规模的工程中已经定义了很多bean的时候更是如此。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配置更加的清晰。当你的配置文件中存在大量的bean定义时,它可以显著地提高可读性。

4. 尽量使用type而不是index去解决构造函数参数的匹配问题

当构造函数中有多个同类型的参数时,Spring只允许你使用从0开始的index或者value标签来解决这个问题。请看下面的例子:
<bean id="billingService"

class="com.lizjason.spring.BillingService">

<constructor-arg index="0" value="lizjason"/>

<constructor-arg index="1" value="100"/>

</bean>

最好用type属性取代上面的做法:

<bean id="billingService"

class="com.lizjason.spring.BillingService">

<constructor-arg type="java.lang.String"

value="lizjason"/>

<constructor-arg type="int" value="100"/>

</bean>

用index可以稍微减少冗余,但是它更容易出错且不如type属性可读性高。你应该仅在构造函数中有参数冲突时使用index。

5. 如可能,尽量复用bean定义

Spring提供了一种类似于继承的机制来降低配置信息的重复并使XML配置更加的简单。一个子bean可以从它的父bean继承配置信息,本质上这个父bean就像它的子bean的一个模板。这是一个在大型项目中必须使用的特性。所有你要做的就是把父bean的abstract属性置为true,并在子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 bean继承了abstractService bean的属性companyName的值lizjason。注意,如果你为bean声名一个class或工厂方法,这个bean将会默认为abstract

6. 尽量使用ApplicationContext装配bean,而不是用import

像Ant脚本中imports一样,Spring的import 元素对于模块化bean的装配非常有用,例如:

<beans>

<import resource="billingServices.xml"/>

<import resource="shippingServices.xml"/>

<bean id="orderService"

class="com.lizjason.spring.OrderService"/>

<beans>

然而,比起在XML中用imports预装配这些bean,利用ApplicationContext来配置它们将更加灵活,也可以使XML配置更加的易于管理。你可以像下面这样传递一个bean定义数组到ApplicationContext的构造函数中:

String[] serviceResources =

{"orderServices.xml",

"billingServices.xml",

"shippingServices.xml"};

ApplicationContext orderServiceContext = new

ClassPathXmlApplicationContext(serviceResources);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java框架,它提供了一种简化Java开发的方式。它的目标是通过依赖注入(DI)和向切面编程(AOP)来降低代码的耦合性,提高开发效率和系统的可维护性。从入门到实战,你可以按照以下步骤进行学习和应用Spring框架: 1. 学习基础知识:了解Spring框架的核心概念,包括依赖注入、控制反、面向切面编程等。可以通过阅读官方文档、参考书籍或在线教程来学习。 2. 搭建开发环境:安装Java开发环境(JDK)和集成开发环境(IDE),如Eclipse、IntelliJ IDEA等。然后下载并配置Spring框架。 3. 创建项目:使用Spring框架创建一个简单的Java项目。可以使用Spring Initializr(Spring的快速启动工具)创建一个基本的Spring Boot项目。 4. 配置和使用Spring的核心功能:学习如何通过注解或XML配置来使用Spring的核心功能,如依赖注入、Bean的生命周期管理、AOP等。 5. 数据访问与持久化:学习如何使用Spring框架进行数据库操作和持久化,可以使用Spring JDBC、Spring Data JPA或MyBatis等。 6. Web开发:学习如何使用Spring MVC构建Web应用程序。了解基本的请求处理、页面渲染、表单处理等。 7. 集成其他技术:学习如何集成其他常用的技术和框架,如Spring Security(安全认证和授权)、Spring Cloud(构建分布式系统)、Spring Integration(集成不同系统之间的数据交互)等。 8. 测试和调试:学习如何使用Spring框架进行单元测试和集成测试,并掌握调试技巧

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值