Spring XML配置的十二个最佳实践
?Spring是一个强大的Java应用框架,它广泛地应用于Java应用程序中,为Plain Old Java Objects(POJO)提供企业级服务。Spring利用依赖注入机制来简化工作,同时提高可测试性。其配置文件(通常是XML格式)中指定了 Spring bean、依赖性以及bean所需的服务。但是,这些XML配置文件既冗长又不实用。对于需要定义大量Spring bean的大型项目来说,它们难以阅读和管理。
?????? 在本文中,我将向您展示12种用于Spring XML配置的最佳实践。其中的一些实践与其说是最佳实践,倒不如说是必要实践。注意,其他因素(如域模型的设置)也可能影响XML的配置,但是本文重点研究XML配置的可读性和可管理性。
1。避免使用自动绑定(autowiring)功能?
?????? Spring可以通过bean类的自省自动绑定依赖 性,所以不必显式指明bean的属性和构造函数。Bean属性可以通过属性名称或类型匹配来实现自动绑定。构造函数通过类型匹配来实现自动绑定。甚至可以 指定自动检测autowiring模式,它可以引导Spring选择一种适当的运行机制。先来看看下面的一个例子:
?
OrderService 类的属性名在容器中用于匹配bean实例。自动绑定可能会节省一些键入工作量并减少混乱。但是在现实项目中不应该使用这种方式,因为它牺牲了配置的可读性 和可维护性。许多指南和介绍中大肆吹捧自动绑定是Spring的一项极好的特性,而没有提到这一特性所带来的牺牲。依我来看,这就像Spring中的对象 池(object-pooling),更大程度上只是宣传的噱头。对于精简XML配置文件来说,它是一个好办法,但它实际上增加了复杂性,尤其是在运行包 含大量类声明的项目时。虽然Spring允许混合使用自动绑定和显式绑定,但这会使XML配置更加晦涩难懂。
2.使用命名约定?
?????? 该原则对于Java编码也一样适用。在项目中使用清晰的、描述性的、一致的命名约定将 非常有利于开发人员理解XML配置。例如,对于bean ID,可以按照Java类字段名约定来命名它。OrderServiceDAO实例的bean ID应该命名为orderServiceDAO。对于大型项目,可以在bean ID前面加上包名作为前缀。3. 使用简洁形式?
?????? 简洁形式避免了冗长,因为它将属性值和引用从子元素中移入属性中。例如下面的例子:?利用type属性来编写会更好一些,如下:
??使用index可以减少一些代码,但是与type属性相比,它更易于出错且难于阅读。只有在构造函数参数不明确的时候,才应该使用index。5. 尽可能重用已定义的bean?
????? Spring提供了一种类似于继承的机制来减少配置信息的复制并简化 XML配置。定义一个子类,它就可以从父类那里继承配置信息,而父类实际上成为子类的一个模板。这就是大型项目中所谓的重用。只需在父类bean中设置 abstract=true,然后在子bean中指定parent引用。例如:???ShippingService类从abstractService类继承companyName属性的值——lizjason。如果一个bean没有指定类或工厂方法,那么这个bean便是抽象的。
6. 在导入时,首选通过ApplicationContext来汇编bean定义?
像Ant脚本中的导入一样,Spring的import元素对于汇编模块化的bean定义来说是很有用的。例如:<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配置文件。?