知识大全 Spring XML配置的12个技巧
Posted 属性
篇首语:努力尽今夕,少年犹可夸。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring XML配置的12个技巧相关的知识,希望对你有一定的参考价值。
Spring XML配置的12个技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Spring是一个强有力的java程序框架 其被广泛应用于java的程序中 它用POJO提供了企业级服务 Spring利用依赖注入可以获得简单而有效的测试能力 Spring beans 依赖关系 以及服务所需要的bean都将在配置文件中予以描述 配置文件一般采用XML格式 然而XML配置文件冗长而不易使用 在你进行一个使用了大量bean的大项目中它将变得难以阅读和控制
在这篇文章中我将给你展示 种的有关Spring XML配置文件的最佳技巧 它们中的一些具有更多的实际意义 而不仅是最好的技巧 请注意另外一些因素 例如域模型的设计 会影响到XML配置 但是这篇文章更关注于XML配置的可读性和可操控性
. 避免使用自动装配
Spring可以通过bean类的自省来实现自动装配依赖 这样的话你就不必明确地描述bean的属性或者构造函数的参数 根据属性名称活匹配类型 bean属性可以自动进行装配 而构造函数可以根据匹配类型自动装配 你甚至可以设置自动装配进行自动侦测 这样Spring替你就会选择一个合适的机制 请看下面的例子
Spring可以通过bean类的自省来实现自动装配依赖 这样的话你就不必明确地描述bean的属性或者构造函数的参数 根据属性名称活匹配类型 bean属性可以自动进行装配 而构造函数可以根据匹配类型自动装配 你甚至可以设置自动装配进行自动侦测 这样Spring替你就会选择一个合适的机制 请看下面的例子
<bean id= orderService
class= lizjason spring OrderService
autowire= byName />
OrderService类的属性名被用来和容器中的一个bean实例进行匹配 自动装配会默默的保存一些类型信息并降低混乱 然而 由于它会牺牲掉这种配置的直观性和可维护性 你在实际的项目中将不会用到它 许多指南和陈述材料都把它吹捧为Spring的一个非常cool的特性 而没有提到它的这个缺点 依我之见 就像Spring的对象池一样 它更多了一些商业味道 它看起来好像可以使XML配置文件更精简一些 但实际上却增加其复杂性 尤其是在你的较大规模的工程中已经定义了很多bean的时候更是如此 Spring允许你混合使用自动和手动装配 但是这种矛盾会使XML配置更加的令人费解
. 使用命名规范
和Java编码的理念一样 在项目中始终用清晰的 描述性的 一致的命名规范对开发人员理解XML配置非常有用 拿bean ID举例来说 你可以遵循Java类中属性的命名规范 比如说 OrderServiceDAO的bean ID应该是orderServiceDAO 对于大项目来说 在bean ID前加包名来作为前缀
. 使用简化格式
简化格式有利于减少冗余 因为它把属性值和引用作为属性 而不是子元素 看下面的例子
<bean id= orderService
class= lizjason spring OrderService >
<property name= panyName >
<value>lizjason</value>
</property>
<constructor arg>
<ref bean= orderDAO >
</constructor arg>
</bean>
以上程序可以重新以简化格式书写为
<bean id= orderService
class= lizjason spring OrderService >
<property name= panyName
value= lizjason />
<constructor arg ref= orderDAO />
</bean>
简化格式在 版本时已经可用了 但请注意不存在<ref local= >这种简化格式不仅可以较少你的代码输入量 而且可以使XML配置更加的清晰 当你的配置文件中存在大量的bean定义时 它可以显著地提高可读性
. 尽量使用type而不是index去解决构造函数参数的匹配问题
当构造函数中有多个同类型的参数时 Spring只允许你使用从 开始的index或者value标签来解决这个问题 请看下面的例子
<bean id= billingService
class= lizjason spring BillingService >
<constructor arg index= value= lizjason />
<constructor arg index= value= />
</bean>
最好用type属性取代上面的做法
<bean id= billingService
class= lizjason spring BillingService >
<constructor arg type= java lang String
value= lizjason />
<constructor arg type= int value= />
</bean>
用index可以稍微减少冗余 但是它更容易出错且不如type属性可读性高 你应该仅在构造函数中有参数冲突时使用index
. 如可能 尽量复用bean定义
Spring提供了一种类似于继承的机制来降低配置信息的重复并使XML配置更加的简单 一个子bean可以从它的父bean继承配置信息 本质上这个父bean就像它的子bean的一个模板 这是一个在大型项目中必须使用的特性 所有你要做的就是把父bean的abstract属性置为true 并在子bean中加以引用 例如
<bean id= abstractService abstract= true
class= lizjason spring AbstractService >
<property name= panyName
value= lizjason />
</bean>
<bean id= shippingService
parent= abstractService
class= lizjason spring ShippingService >
<property name= shippedBy value= lizjason />
</bean>
shippingService bean继承了abstractService bean的属性panyName的值lizjason 注意 如果你为bean声名一个class或工厂方法 这个bean将会默认为abstract
. 尽量使用ApplicationContext装配bean 而不是用import
像Ant脚本中imports一样 Spring的import 元素对于模块化bean的装配非常有用 例如
<beans>
<import resource= billingServices xml />
<import resource= shippingServices xml />
<bean id= orderService
class= lizjason spring OrderService />
<beans>
然而 比起在XML中用imports预装配这些bean 利用ApplicationContext来配置它们将更加灵活 也可以使XML配置更加的易于管理 你可以像下面这样传递一个bean定义数组到ApplicationContext的构造函数中
String[] serviceResources =
orderServices xml
billingServices xml
shippingServices xml ;
ApplicationContext orderServiceContext = new
ClassPathXmlApplicationContext(serviceResources);
. 用id来标识bean
你可以用id或名字作为bean的标识 用id可读性较差 但是它可以影响XML分析器使bean的reference有效 如果id由于XML IDREF约束而无法使用 你可以用name作为bean的标识 XML IDREF约束是指id必须以字母开始(或者是在XML声名了的一个标点符号) 后面可以是字母 数字 连字符 下划线 冒号或full stops(不知道怎么翻译好) 在实际应用中很少会遇到XML IDREF约束问题
. 在开发阶段使用依赖检查
你可以为bean的dependency check属性设置一个值来取代默认的none 比如说simple objects或者all 这样的话容器将替你做依赖有效性的检查 当一个bean的所有属性(或者某些属性目录)都被明确设置 或利用自动装配时将会非常有用
<bean id= orderService
class= lizjason spring OrderService
dependency check= objects >
<property name= panyName
value= lizjason />
<constructor arg ref= orderDAO />
</bean>
在这个例子中 容器将确保这些属性不是privitives或者保证collections是为orderService bean设置的 为所有的bean设置默认的依赖检查是可能的 但这个特性由于有些bean的属性不需要设置而很少使用
. 为每个配置文件加一个描述注释
在XML配置文件中最好使用有描述性的id和name 而不是成堆的注释 另外 加一个文件描述头将会非常有用 这个描述可以概括文件中定义的bean 另一个选择 你可以在description元素中加入描述信息 例如
<beans>
<description>
This file defines billing service
related beans and it depends on
baseServices xml which provides
service bean templates
</description>
</beans>
用description元素的一个好处就是工具可以很容易的把描述信息从这个元素中提取出来
. 和team members沟通变更
当你修改java源码后 要确保更改了配置文件中的相应部分并把这个情况告知你的team members XML配置文件也是代码 它们是程序的重要组成部分 但它们很难阅读和维护 大多数时间里 你需要同时看XML配置文件和java代码才能知道是怎么回事
. setter注入和构造函数注入 优先使用前者
Spring提供了三种注入方式 构造函数注入 setter注入和方法注入 一般我们使用前两种
<bean id= orderService
class= lizjason spring OrderService >
<constructor arg ref= orderDAO />
</bean>
<bean id= billingService
class= lizjason spring BillingService >
<property name= billingDAO
ref= billingDAO >
</bean>
在这个例子中 orderService bean用了构造函数注入 而BillingService bean用了setter注入 构造函数注入可以确保bean正确地构建 但是setter注入更加的灵活和易于控制 特别是当class有多个属性并且它们中的一些是可选的情况是更是如此
. 不要滥用注入
就像前面提到的 Spring的ApplicationContext可以替你创建java对象 但不是所有的java对象都应该通过注入创建 例如 域对象就不应该通过ApplicationContext创建 Spring是一个优秀的框架 但是考虑到可读性和可操控性 基于XML配置的配置会在定义很多bean的时候出现麻烦 过渡使用依赖注入将会使XML配置更加的复杂和冗长 切记 当使用高效的IDE时 例如Eclipse and IntelliJ java代码更加的易于阅读 维护和管理比使XML文件
结论
相关参考
Spring集成Quartz的XML配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <
Spring中加载XML配置文件的方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! sprin
Spring中bean的基本xml配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在spri
读取xml文件 /** *利用XmlBeanFactory(Resourceresource) *这里Resource必须是xml格式 *Resource包括AbstractResourc
知识大全 spring在web.xml中和在struts中的不同配置
Spring中WebApplicationContext的研究 ApplicationContext是Spring的核心Context我们通常解释为上下文环境我想用容器来表述它更容易理解一些Ap
Spring自动装配的学习 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在xml配置文件中au
Spring中加载XML文件的方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! spring中
Spring中的Object/XML映射详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
以前项目中经常用spring事务处理还没有亲自配置过惭愧现在马上上路. 首先在spring容器中配置transactionManager这个有好多实现这里以HibernateTransactio