分类:
2008-09-12 12:58:33
OrderService类的属性名在容器中用于匹配bean实例。自动绑定可以潜在地节省一些打字和减少一些混乱。但是在现实世界的工程里你不应该使用这种方式,这是因为它牺牲了配置的清晰性和可维护性。许多指南和介绍中大量吹捧自动绑定是Spring的一种极好的特征而没有提到这一特性所带来的牺牲。依我的观点,这就像Spring中的object-pooling,它更像是一种为了占据更多市场的商业特征。它对于XML配置文件的小巧化是一个好办法,但实际上也增加了复杂程度,尤其当你运行有大量类声明的工程时。虽然Spring允许你混合自动绑定和手动绑定,但是这个矛盾会使XML配置更加晦涩难懂。class="com.lizjason.spring.OrderService"
autowire="byName"/>
class="com.lizjason.spring.OrderService">
lizjason
class="com.lizjason.spring.OrderService">
value="lizjason"/>
class="com.lizjason.spring.BillingService">
class="com.lizjason.spring.BillingService">
value="lizjason"/>
class="com.lizjason.spring.AbstractService">
value="lizjason"/>
parent="abstractService"
class="com.lizjason.spring.ShippingService">
相对于使用import在XML配置中来预装配,通过ApplicationContext来配置这些beans,显得更加灵活。利用ApplicationContext也使得XML配置易于管理。你可以像下面的例子那样在ApplictionContext构造器里布置bean:
class="com.lizjason.spring.OrderService"/>
String[] serviceResources =7. 利用id作为bean的标识符
{"orderServices.xml",
"billingServices.xml",
"shippingServices.xml"};
ApplicationContext orderServiceContext = new
ClassPathXmlApplicationContext(serviceResources);
在这个例子里,容器确保为orderService bean设置的属性不是primitives 或者 collections。为所有的bean设置默认依赖检测也是可以的,但是我们很少这样做,是因为有些bean的属性根本就不必设置。class="com.lizjason.spring.OrderService"
dependency-check="objects">
value="lizjason"/>
This file defines billing service
related beans and it depends on
baseServices.xml,which provides
service bean templates...
...
class="com.lizjason.spring.OrderService">
class="com.lizjason.spring.BillingService">
ref="billingDAO">
这个例子中,orderService类使用的是constructor injection,而BillingService类使用的是setter injection。constructor injection可以确保bean不会在一个非法状态下被创建,但是setter injection更加灵活并且更易管理,尤其当类存在很多属性并且其中一些是可选的情况下。
12. 不要滥用依赖注入
作为最后一点,Spring ApplicationContext可以替你创建Java对象,但是并不是所有的Java对象都通过依赖注入来创建的。例如,全局的对象不应该通过ApplicationContext来创建。Spring是一个很棒的框架,但是,就易读性和易管理性而言,当定义大量bean的时候,基于XML的配置问题就会突出。过度的依赖注入会使XML配置变得复杂而且臃肿。记住!使用强大的IDE时,例如Eclipse和IntelliJ,与XML文件相比,Java代码更加易读,易维护,易管理。
总结
对于Spring的配置,XML是很优秀的方式。但当定义大量bean时,基于XML配置会变得冗长,笨拙。Spring提供了丰富的配置选项。适当地利用其中的选项可以使XML配置清晰,但是,有些选项,例如autowiring(自动绑定),往往会降低易读性和易维护性。文章中所列举的实例,可以帮助你创建出清晰易读的XML配置文件。
关于作者:
Jason Zhicheng Li是Object Computing, Inc. in St. Louis, MO(公司)一名资深的软件工程师。
资源:
Spring论坛:
版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
原文:
译文: