- 浏览: 561697 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
Spring是一个强大的Java应用框架,它广泛地应用于Java应用程序中,为Plain Old Java Objects(POJO)提供企业级服务。Spring利用依赖注入机制来简化工作,同时提高可测试性。其配置文件(通常是XML格式)中指定了 Spring bean、依赖性以及bean所需的服务。但是,这些XML配置文件既冗长又不实用。对于需要定义大量Spring bean的大型项目来说,它们难以阅读和管理。 1。避免使用自动绑定(autowiring)功能
在本文中,我将向您展示12种用于Spring XML配置的最佳实践。其中的一些实践与其说是最佳实践,倒不如说是必要实践。注意,其他因素(如域模型的设置)也可能影响XML的配置,但是本文重点研究XML配置的可读性和可管理性。
Spring可以通过bean类的自省自动绑定依赖 性,所以不必显式指明bean的属性和构造函数。Bean属性可以通过属性名称或类型匹配来实现自动绑定。构造函数通过类型匹配来实现自动绑定。甚至可以 指定自动检测autowiring模式,它可以引导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>
利用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中设置 abstract=true,然后在子bean中指定parent引用。例如:
<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没有指定类或工厂方法,那么这个bean便是抽象的。
6. 在导入时,首选通过ApplicationContext来汇编bean定义
像Ant脚本中的导入一样,Spring的import元素对于汇编模块化的bean定义来说是很有用的。例如:
<beans> <import resource="billingServices.xml"/> <import resource="shippingServices.xml"/> <bean id="orderService" class="com.lizjason.spring.OrderService"/> <beans>
然而,相对于使用import在XML配置中进行预汇编,通过ApplicationContext来配置这些bean则显得更加灵活。使用 ApplicationContext的话,XML配置也更易于管理。可以向ApplictionContext构造函数传递一组bean定义,如下:
String[] serviceResources ={"orderServices.xml", "billingServices.xml", "shippingServices.xml"}; ApplicationContext orderServiceContext = new ClassPathXmlApplicationContext(serviceResources);
7. 使用id作为bean标识符
可以指定一个id或名称来作为bean标识符。虽然使用id不能提高 可读性,但是它可以利用XML分析程序来对bean引用进行验证。如果由于XML IDREF的约束而不能使用某个id,那么可以使用名称来作为bean的标识符。XML IDREF的约束是:id必须以字母(或者XML规范中定义的标点符号)开头,后面是字母、数字、连字符、下划线、冒号或句点。实际上,很少会遇到XML IDREF约束问题。
8. 在开发阶段使用依赖性检查(dependency-check)
可以在bean定义中为dependency-check属性设置一个非默认值,比如simple、objects或all,以便容器进行依赖性检查。当需要显式或通过自动绑定设置bean的全部属性(或某类属性)时,依赖性检查便显得很有用。
<bean id="orderService" class="com.lizjason.spring.OrderService" dependency-check="objects"> <property name="companyName" value="lizjason"/> <constructor-arg ref="orderDAO"/> </bean>在这个例子中,容器确保为orderService bean设置的属性不是primitives或collections。也可以为所有的bean设置默认依赖性检查,但是我们很少这样做,因为有些bean属性根本就不必设置。
9. 为每个配置文件添加首部注释
最好使用描述性的id和名称来取代XML配置文件中的内置注释。此外,添加一个配置文件首部也很有用,它可以概述文件中所定义的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标签的一个好处是可以轻松地利用工具从标签中选获取描述内容。
10. 对于更改,团队成员要积极交流
在重构Java代码时,需要随时更新配置文件并通知团队成员。XML配置文件也是代码,它们是应用程序的至关重要的部分,但是它们难于阅读和维护。大部分情况下,需要同时阅读XML配置文件和运行中的Java代码。
11. Setter注入优于构造函数注入
Spring提供了3种类型的依赖注入:构造函数注入(constructor injection)、setter注入(setter injection)和方法注入(method injection)。我们一般只用前两种。
<bean id="orderService" class="com.lizjason.spring.OrderService"> <constructor-arg ref="orderDAO"/> </bean> <bean id="billingService" class="com.lizjason.spring.BillingService"> <property name="billingDAO" ref="billingDAO"> </bean>在这个例子中,orderService类使用的是构造函数注入,而BillingService类使用的是setter注入。构造函数注入可以确 保bean不会在一个非法状态下被创建,但是setter注入更加灵活且更易于管理,尤其是在类包含许多属性并且其中一些可选的情况下。
12. 不要滥用依赖注入
最后一点,Spring ApplicationContext可以为您创建Java对象,但并不是所有的Java对象都应通过依赖注入来创建。例如,全局对象不应该通过 Application Context来创建。Spring是一个很棒的框架,但是,就可读性和易管理性而言,如果定义了大量bean,基于XML的配置 就可能成为问题。过度使用依赖注入会使XML配置变得复杂且臃肿。要知道,借助于功能强大的IDE(如Eclipse和IntelliJ),Java代码 比XML文件更加易读、易维护、易管理。
结束语
XML是通用的Spring配置方式。但如果定义了大量bean,基于XML的配置就会变得冗长 而不实用。Spring提供了丰富的配置选项,恰当地利用其中的选项可以使XML配置更清晰,但是,有些选项(如autowiring)往往会降低配置文 件的可读性和可维护性。遵循本文中所描述的最佳实践,将有助于您创建出清晰易读的XML配置文件。
发表评论
-
Java Development Without Spring(2) – Spring的不足与云时代的编程模式
2010-12-20 20:36 952本文将在上文对云时代的Java应用进行分析的基础上,来 ... -
Java Development Without Spring(1) – 云时代的Java应用
2010-12-20 20:35 891这几天已经初步把YunEngine的整体架构定下来了, ... -
整合struts+spring+jpa中出现的解决方法
2010-12-12 17:45 22861. org.springframework.transa ... -
Spring MVC快速上手教程
2010-11-30 22:12 1062Spring Framework可以被使用在很多场合之中,考虑 ... -
Spring整合Struts(二)
2010-11-27 09:55 884转:http://xm-king.iteye.com/blog ... -
Sping整合Struts(一)
2010-11-27 09:54 873转:http://xm-king.iteye.com/blog ... -
全面分析 Spring 的编程式事务管理及声明式事务管理(转)
2010-11-15 18:10 1071https://www6.software.ibm.com/d ... -
用Spring实现定时任务(转)
2010-11-15 15:43 1075最近在做一个抽奖活动的设计与开发,目前快上线了。里面定时更新抽 ... -
Hibernate 与 Spring 多数据源的配置
2010-11-15 15:38 889Spring2.0.1以后的版本已经支持配置多数据源,并且可以 ... -
Spring事务
2010-11-15 15:33 965Spring中事物定义 一、Propagation ... -
Spring中获得bean的方法(转载)
2010-11-13 10:01 829今天看到网上有转载的获得Spring Bean的方法,觉得 ... -
Spring的事务配置(5种方式)
2010-11-13 09:57 793根据代理机制的不同,总结了五种Spring事务的配置方式,配置 ... -
Spring Annotation 笔记——IOC篇
2010-11-12 20:36 989@Autowired 1、Spring 通过一个 BeanPo ... -
详解 Spring 3.0 基于 Annotation 的依赖注入实现(转)
2010-11-12 19:26 787使用 @Repository、@Service ...
相关推荐
### Spring XML配置十二个最佳实践 #### 一、利用自动装配简化配置 在Spring框架中,自动装配(Autowiring)是一种非常实用的功能,它能够帮助我们减少对Bean依赖关系的手动配置工作量。通过设置`autowire`属性,...
本文将详细介绍关于Spring XML配置文件的12个最佳实践,这些实践不仅有助于提高配置文件的可读性和可维护性,还能帮助开发者更好地理解和使用Spring框架。 #### 最佳实践 1. **避免使用自动绑定(Autowiring)** ...
本文将详细解析Spring中XML配置文件的十二个最佳实践,主要关注前六个方法。 1. **避免使用自动绑定(Autowiring)** Spring的自动绑定功能允许框架通过类的自省自动注入依赖。虽然可以减少手动配置,但会导致配置...
《Spring 2.0 核心技术与最佳实践》是由知名IT教育家廖雪峰编写的教程,旨在为从初学者到高级工程师提供全面而深入的Spring 2.0框架理解与应用指导。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛使用...
本实践指南将深入探讨Spring配置的最佳实践,旨在帮助开发者优化代码,提高应用的可维护性和可扩展性。 一、XML配置与Java配置的选择 Spring最初是以XML配置为主,但随着版本的更新,Java配置逐渐成为首选。Java...
本文主要探讨了Spring XML配置文件的六个最佳实践,旨在提升代码的可读性、可维护性以及整体项目的结构。以下是这六个方法的详细说明: 1. 避免使用自动绑定(autowiring) 自动绑定允许Spring通过bean类的自省来...
### Spring中XML配置的12个技巧 #### 1. 避免使用自动装配 在Spring框架中,自动装配(auto-wiring)是一种强大的功能,它允许开发者通过元数据(如bean类的自省)自动装配bean之间的依赖关系,从而避免在XML配置...
标题 "Spring全注解project示例 (无web.xml配置)" 提供了我们即将探讨的核心主题:一个使用Spring框架,完全依赖注解配置的项目,且没有传统的web.xml部署描述符。这种配置方式在现代Spring应用中非常常见,因为它...
CXF环境配置 - jackymin CXF与Spring的集成 log4j的配置使用 Spring XML配置十二个最佳实践WebService开发实例 (Xfire+Spring+Hibernate)
该项目为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** 你可以创建一个自定义...
《Spring 2.0核心技术最佳实践源代码》是关于Spring框架深入学习的重要参考资料,尤其针对Spring 2.0版本的核心特性进行了详细的解析和实践。在第十章中,我们将会探讨以下几个关键知识点: 1. **AOP(面向切面编程...
《Spring2.0 核心技术与最佳实践》是一本深度解析Spring框架2.0版本的书籍,其随书源码提供了丰富的实例和代码,帮助读者深入理解Spring的核心特性和应用策略。虽然源码中不包含`lib`包,但我们可以根据Spring2.0的...
《Hibernate 3.5与Spring 2.5.5整合的最佳实践》 在现代Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,与Spring框架的结合使用是常见的做法。本篇将深入探讨如何将Hibernate 3.5与Spring...
Spring团队意识到这个问题后,为了摆脱繁琐的XML配置,就推出了Spring Boot. Spring Boot 使用自动配置技术,可以做到零配置XML文件,当然如果想用XML配置Bean,Spring Boot 也保持了兼容。 Spring Boot 无疑如今已经...
标题中的"spring_2021.7.14.zip"表明这是一份关于Spring框架的资料,时间戳为2021年7月14日,...对于想要学习或复习Spring框架的人来说,这是一个宝贵的资料库,可以系统性地了解和掌握Spring的核心功能和最佳实践。
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效...通过学习和实践这个示例,你不仅可以掌握如何在Spring Boot中使用Spring Batch,还能了解批处理的最佳实践,这对于处理大数据量的应用场景非常有价值。
1. **XML配置**:传统的Spring配置通常使用XML文件,如`beans.xml`,其中包含了Bean的定义,包括类名、初始化方法、属性等。例如: ```xml <value>constructorValue ``` 2. **注解配置**:随着Java...