作者简介:Craig Walls是Texas-based公司的软件开发人员,有着超过13年的开发经验,涉及的领域有通信,金融,零售,教育以及软件业等。
他是Spring Framework的狂热拥护者,频繁的在当地local user groups讨论组和相关会议上演讲Spring,并且他的Blog上也有很多关于Spring的内容。
出版的著作有:z Spring in Action, 2nd Edition, 2007z XDoclet in Action, 2003他的Blog是:z 所参与的项目:z Committer to XDoclet project;z Originator of Portlet and Spring modules for XDoclet本手册主要是将分布于文档中的那些零散的配置文件部分统一成一个比较系统的整体。
结合Spring文档一起查阅也许能节省你一些时间。
不过,并不推荐你全部掌握;很多陌生的元素或标签只应用于特定场合。
本手册英文版本可以在:下载。
Spring配置全书作者Craig Walls译者superleo 关于Spring的配置Spring Framework总是不断的改变着Java企业开发的方向,它用一种松耦合的方式来配置和组装应用程序对象和业务对象,比以往的Java企业开发来的更加简洁。
一旦你开发了基于Spring 的应用程序,在Spring上下文配置的那些资源简直就是唾手可得。
依赖注入是Spring容器的核心尽管Spring Framework可以做很多事,但依赖注入却是Spring容器提供的最基本的功能。
任何稍微复杂一点的应用程序都至少由两个或两个以上的对象协作在一起,共同完成一些业务逻辑。
以往的Java企业开发,每个对象都要自己去主动获得他们所引用(或依赖)的对象,才可正常运作。
这将导致代码之间的紧耦合,难以测试。
有了依赖注入后,对象所依赖的资源则可通过外部来获得。
换句话说,对象所依赖的资源是按照它们的需要给注入进去的。
对于基于Spring的应用程序来说,是Spring容器将这些对象所依赖的资源帮助实现注入依赖的。
用XML来配置Spring到了Spring2.0,Spring鼓励你使用基于XML Scheme的配置方式来应用于你的系统,这比起过去基于DTD的方式要更加灵活。
一个典型的Spring2.5配置文件至少拥有以下结构:<?xml version=”1.0” encoding=”UTF-8”?><beans xmlns=”/schema/beans”xmlns:xsi=”/2001/XMLSchema-instance”xsi:schemaLocation=”/schema/beans/schema/beans/spring-beans-2.5.xsd><!-- place configuration details here --></beans>在<beans>元素中,你可以放置“bean”的声明以及其它元素来配置你的应用程序上下文。
“beans”命名空间是Spring配置文件中所有元素的父类,但它不是孤立的。
Spring还包括其它七种以上的命名空间,稍后我将会在本手册中一一介绍。
如果你想使用其它命名空间的话,你需要事先声明它们。
比如说,如果你想使用“context”命名空间的话,你应该在XML声明如下:<?xml version=”1.0” encoding=”UTF-8”?><beans xmlns=”/schema/beans”xmlns:xsi=”/2001/XMLSchema-instance”xmlns:context=”/schema/context”xsi:schemaLocation=”/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd”><!-- place configuration details here --></beans>Beans 命名空间简介Schema URI/schema/beansSchema XSD/schema/beans/spring-beans-2.5.xsdbeans命名空间是Spring命名空间的核心,也是你配置Spring时使用最多的一个。
根元素是<beans>,它不仅可以包含一个或多个<bean>子元素,而且还可以包含其它命名空间的元素,甚至在<beans>下你可以不配置任何<bean>子元素。
Spring XML 图表的一些约定Spring XML图通常使用以下符号来表示哪些元素是必选的,可选的以及它们之间的包含关系。
Bean命名空间下的元素简介元素 描述<alias> 为一个定义过的bean起一个别名<bean> 在Spring容器中定义bean元素<constructor-arg> 向bean的构造函数注入值或引用。
这就是我们常说的构造函数注入。
<description> 用来描述Spring context或每个bean元素。
虽然它会被Spirng容器所忽略,但<description>元素可以通过工具生成属于你的是Spring context文档。
<import> 导入其它Spring context的定义。
<lookup-method> 使用方法来代替getter注入。
指定一个方法,它会在运行被复写从而返回一个指定的bean。
这就是我们常说的getter注入。
<meta> 允许为你的bean进行meta配置。
仅在一些特殊场合下有用。
<property> 为bean的特定属性注入一个值或者引用。
这就是我们常说的setter注入。
<replaced-method> 用一个新的实现来代替bean的某个方法。
<bean>元素揭密虽然有很多XML元素可以用来配置Spring context,但也许你用的最多的可能还是<bean>元素。
因此,让你深入了解<bean>标签是十分必要的。
属性 描述abstract 如果设置为true,那么Spring容器认定此bean为抽象的,并且不会对它进行初始化。
autowire 如果该bean需要autowire的话,声明采用哪一种autowire。
可选的值有:byTye,byname,constractor,autodetect或noautowire-candidate 如果设置为false,该bean不会被当作其它bean的autowire候选对象。
(也许就是说就算别的bean设置了autowire,仍然会忽略掉该bean)class 用来指定bean的全限定名dependency-check 要求Spring采用何种方式来检查bean的setting属性设置情况。
可用值如下:simple:检查所有的原始类型属性注入情况objects:检查所有复杂类型属性注入的情况其它可选的值还有 default, none 或 all.depends-on 该bean初始化之前,要求Spring容器事先将所依赖的bean也实例化。
destroy-method 该bean从Spring容器卸载时,指定一个方法供Spring容器回调 factory-bean 指定一个工厂方法来创建此bean。
id 该bean在Spring容器中的唯一标识。
init-method 该bean被初始化或被注入到别的bean中时,Spring容器回调应该方法。
lazy-init 如果为true那么bean将延迟加载。
name bean在spring容器中定义的名称。
它是除使用id外的另一个选择。
parent 指定bean在配置文件中的父类。
Scope 设置该bean的作用域。
默认情况下,所有的beans都是singleton。
其它可选的包括:prototype, request和session.Bean命名空间实例下面的Spring XML配置文件配置了两个beans,其中一个注入到另一个中去:<?xml version=”1.0” encoding=”UTF-8”?><beans xmlns=”/schema/beans”xmlns:xsi=”/2001/XMLSchema-instance”xsi:schemaLocation=”/schema/beans/schema/beans/spring-beans-2.5.xsd”><bean id=”pirate” class=”Pirate”><constructor-arg value=”Long John Silver” /><property name=”map” ref=”treasureMap” /></bean><bean id=”treasureMap” class=”TreasureMap” /></beans>第一个bean的ID为“pirate”,类型为“Pirate”。
它使用了构造函数注入,该构造函数带有一个String参数,在这个例子中参数的值为“Long John Silver”。
另外,它的“map”属性引用了另一个叫“treasureMap”的bean,该bean是TreasureMap的一个实例。
温馨提示:不要把你所有的beans都定义在一个XML文件中。
一旦你的应用程序变得越来越复杂,在Spring 的XML配置文件中定义的beans的数量一定让你印象深刻。
也没有什么理由要把所有的beans 都定义在一个XML配置文件中去。
通过将所有的beans分别放在多个XML文件中,有助于你的Spring配置文件更易于管理。
当应用程序上下文(application context)建立的时候,可以使用<import>元素将它们全部组装起来:<import resource=”service-layer-config.xml” /><import resource=”data-layer-config.xml” /><import resource=”transaction-config.xml” />Context 命名空间简介Schema URI/schema/contextSchema XSD/schema/context/spring-context-2.5.xsd在Spring2.5中,context命名空间主要用来提供多种application context特定的配置。