首页 »Java教程 » spring配置文件:Spring中XML配置的12个窍门技巧 »正文
spring配置文件:Spring中XML配置的12个窍门技巧
来源: 发布时间:星期六, 2009年2月21日 浏览:0次 评论:0
Spring利用依赖注入可以获得简单而有效 ![](/icons/11997de.gif) 测试能力 ![](/icons/11997dou2.gif) Spring beans ![](/icons/11997dou.gif) 依赖关系 ![](/icons/11997dou.gif) 以及服务所需要 ![](/icons/11997de.gif) bean都将在配置文件中予以描述 ![](/icons/11997dou.gif) 配置文件 ![](/icons/11997yi.gif) 般采用XML格式 ![](/icons/11997dou2.gif) 然而XML配置文件冗长而不易使用 ![](/icons/11997dou.gif) 在你进行 ![](/icons/11997yi.gif) 个使用了大量bean ![](/icons/11997de.gif) 大项目中它将变得难以阅读和控制 ![](/icons/11997dou2.gif)
在这篇文章中我将给你展示12种 ![](/icons/11997de.gif) 有关Spring XML配置文件 ![](/icons/11997de.gif) 最佳窍门技巧 ![](/icons/11997dou2.gif) 请注意另外 ![](/icons/11997yi.gif) 些原因 ![](/icons/11997dou.gif) 例如域模型 ![](/icons/11997de.gif) 设计 ![](/icons/11997dou.gif) 会影响到XML配置 ![](/icons/11997dou.gif) 但是这篇文章更关注于XML配置 ![](/icons/11997de.gif) 可读性和可操控性
1.避免使用自动装配
Spring可以通过bean类 ![](/icons/11997de.gif) 自省来实现自动装配依赖 ![](/icons/11997dou.gif) 这样 ![](/icons/11997de.gif) 话你就不必明确地描述bean ![](/icons/11997de.gif) 属性或者构造 ![](/icons/11997hanshu.gif) ![](/icons/11997de.gif) 参数 ![](/icons/11997dou2.gif) 根据属性名称活匹配类型 ![](/icons/11997dou.gif) bean属性可以自动进行装配 ![](/icons/11997dou2.gif) 而构造 ![](/icons/11997hanshu.gif) 可以根据匹配类型自动装配 ![](/icons/11997dou2.gif) 你甚至可以设置自动装配进行自动侦测 ![](/icons/11997dou.gif) 这样Spring替你就会选择 ![](/icons/11997yi.gif) 个合适 ![](/icons/11997de.gif) 机制 ![](/icons/11997dou2.gif) 请看下面 ![](/icons/11997de.gif) 例子:
Spring可以通过bean类 ![](/icons/11997de.gif) 自省来实现自动装配依赖 ![](/icons/11997dou.gif) 这样 ![](/icons/11997de.gif) 话你就不必明确地描述bean ![](/icons/11997de.gif) 属性或者构造 ![](/icons/11997hanshu.gif) ![](/icons/11997de.gif) 参数 ![](/icons/11997dou2.gif) 根据属性名称活匹配类型 ![](/icons/11997dou.gif) bean属性可以自动进行装配 ![](/icons/11997dou2.gif) 而构造 ![](/icons/11997hanshu.gif) 可以根据匹配类型自动装配 ![](/icons/11997dou2.gif) 你甚至可以设置自动装配进行自动侦测 ![](/icons/11997dou.gif) 这样Spring替你就会选择 ![](/icons/11997yi.gif) 个合适 ![](/icons/11997de.gif) 机制 ![](/icons/11997dou2.gif) 请看下面 ![](/icons/11997de.gif) 例子:
![](/icons/11997class.gif) ="com.lizjason.spring.OrderService" autowire="byName"/>
OrderService类 ![](/icons/11997de.gif) 属性名被用来和容器中 ![](/icons/11997de.gif) ![](/icons/11997yi.gif) 个bean例子进行匹配 ![](/icons/11997dou2.gif) 自动装配会默默 ![](/icons/11997de.gif) 保存 ![](/icons/11997yi.gif) 些类型信息并降低混乱 ![](/icons/11997dou2.gif) 然而 ![](/icons/11997dou.gif) 由于它会牺牲掉这种配置 ![](/icons/11997de.gif) 直观性和可维护性 ![](/icons/11997dou.gif) 你在实际 ![](/icons/11997de.gif) 项目中将不会用到它 ![](/icons/11997dou2.gif) 许多指南和陈述材料都把它吹捧为Spring ![](/icons/11997de.gif) ![](/icons/11997yi.gif) 个非常cool ![](/icons/11997de.gif) 特性 ![](/icons/11997dou.gif) 而没有提到它 ![](/icons/11997de.gif) 这个缺点 ![](/icons/11997dou2.gif) 依我的见 ![](/icons/11997dou.gif) 就像Spring ![](/icons/11997de.gif) 对象池 ![](/icons/11997yi.gif) 样 ![](/icons/11997dou.gif) 它更多了 ![](/icons/11997yi.gif) 些商业味道 ![](/icons/11997dou2.gif) 它看起来好像可以使XML配置文件更精简 ![](/icons/11997yi.gif) 些 ![](/icons/11997dou.gif) 但实际上却增加其复杂性 ![](/icons/11997dou.gif) 尤其是在你 ![](/icons/11997de.gif) 较大规模 ![](/icons/11997de.gif) 工程中已经定义了很多bean ![](/icons/11997de.gif) 时候更是如此 ![](/icons/11997dou2.gif) Spring允许你混合使用自动和手动装配 ![](/icons/11997dou.gif) 但是这种矛盾会使XML配置更加 ![](/icons/11997de.gif) 令人费解
2.使用命名规范标准
和Java编码 ![](/icons/11997de.gif) 理念 ![](/icons/11997yi.gif) 样 ![](/icons/11997dou.gif) 在项目中始终用清晰 ![](/icons/11997de.gif) ![](/icons/11997dou.gif) 描述性 ![](/icons/11997de.gif) ![](/icons/11997dou.gif) ![](/icons/11997yi.gif) 致 ![](/icons/11997de.gif) 命名规范标准对开发人员理解XML配置非常有用 ![](/icons/11997dou2.gif) 拿bean ID举例来说 ![](/icons/11997dou.gif) 你可以遵循Java类中属性 ![](/icons/11997de.gif) 命名规范标准 ![](/icons/11997dou2.gif) 比如说 ![](/icons/11997dou.gif) OrderServiceDAO ![](/icons/11997de.gif) bean ID应该是orderServiceDAO ![](/icons/11997dou2.gif) 对于大项目来说 ![](/icons/11997dou.gif) 在bean ID前加包名来作为前缀
3.使用简化格式
简化格式有利于减少冗余 ![](/icons/11997dou.gif) ![](/icons/11997yinwei.gif) 它把属性值和引用作为属性 ![](/icons/11997dou.gif) 而不是子元素 ![](/icons/11997dou2.gif) 看下面 ![](/icons/11997de.gif) 例子:
![](/icons/11997class.gif) ="com.lizjason.spring.OrderService"> lizjason
以上 ![](/icons/11997chengxu.gif) 可以重新以简化格式书写为:
![](/icons/11997class.gif) ="com.lizjason.spring.OrderService"> value="lizjason"/>
简化格式在1.2版本时已经可用了 ![](/icons/11997dou.gif) 但请注意不存在 [这种简化格式不仅可以较少你] 代码输入量 而且可以使XML配置更加 清晰 当你 配置文件中存在大量 bean定义时 它可以显著地提高可读性![](/icons/11997dou2.gif)
4.尽量使用type而不是index去解决构造 参数 匹配问题
当构造 中有多个同类型 参数时 Spring只允许你使用从0开始 index或者value标签来解决这个问题 请看下面 例子:
="com.lizjason.spring.BillingService">
最好用type属性取代上面 做法:
="com.lizjason.spring.BillingService"> value="lizjason"/>
用index可以稍微减少冗余 但是它更容易出错且不如type属性可读性高 你应该仅在构造 中有参数冲突时使用index![](/icons/11997dou2.gif)
="xspace-totlerecord">3="xspace-totlepages">1/3="xspace-current">123>
相关文章
读者评论
发表评论
|
|