码迷,mamicode.com
首页 > 编程语言 > 详细

最小化Spring XML配置

时间:2014-09-14 15:26:27      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:最小化spring xml配置

Spring提供了几种技巧,可以帮助我们减少XML的配置数量:

1、自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系。

2、自动检测(autodiscovery)比自动装配更进了一步,让Spring能够自动识别哪些类需要被配置成Spring Bean,从而减少对<bean>元素的使用。

 

1.1、自动装配Bean属性

1.1.14种类型的自动装配

1、byName-把与Bean的属性具有相同名字的其他Bean自动装配到Bean的对应属性中。如果没有跟属性的名字相匹配的Bean,则该属性不进行装配。

2、byType-把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。如果没有跟属性的类型相匹配的Bean,则该属性不被装配。

3、constructor-把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中。

4、autodetect-首先尝试使用constructor进行自动装配。如果失败,再尝试使用byType进行自动装配。


byName自动装配

<bean id="kenny2" class="com.springinaction.springidol.Instrumentalist">
		<property name="song" value="Jingle Bells"></property>
		<property name="instrument" ref="saxophone"></property>
	</bean>

可以这么写

<bean id="instrument" class="com.springinaction.springidol.Saxophone"/>
	<bean id="kenny2" class="com.springinaction.springidol.Instrumentalist" autowire="byName">
		<property name="song" value="Jingle Bells"></property>
	</bean>

byType自动装配

byType自动装配的工作方式类似于byName自动装配,只不过不再是匹配属性的名字而是检查属性的类型。当我们尝试使用byType自动装配时,Spring会寻找哪一个Bean的类型与属性的类型相匹配。

但是byType自动装配存在一个局限性:如果Spring寻找到多个Bean,它们的类型与需要自动装配的属性的类型都相匹配,怎么办呢?在这种场景下,Spring不会猜测哪一个Bean更适合自动装配,而是选择抛出异常。所以,应用只允许存在一个Bean与需要自动装配的属性类型相匹配。

为了避免因为使用byType自动装配而带来的歧义,Spring为我们提供了另外两种选择:可以为自动装配表识一个首选的Bean,或者可以取消某个Bean自动装配的候选资格。

为自动装配标识一个首选Bean,可以使用<bean>元素的primary属性。如果只有一个自动装配的候选Bean的primary属性设为true,那么该Bean将比其他候选Bean优先被选择。

但是primary属性有个很怪异的一点:它默认设置为true。所以,为了使用primary属性,我们不得不将所有非首选的primary属性设为false。例如:

<bean id="instrument" class="com.springinaction.springidol.Saxophone" primary="false"/>

primary属性仅对标识首选Bean有意义。如果在自动装配时,我们希望排除某些Bean,那可以设置这些Bean的autowire-candidate属性为false,如下所示:

<bean id="instrument" class="com.springinaction.springidol.Saxophone" autowire-candidate="false"/>

constructor装配

constructor自动装配具有和byType自动装配相同的局限性。当发现多个Bean匹配某个构造器的入参时,Spring不会尝试猜测哪一个Bean更适合自动装配。此外,如果一个类有多个构造器,它们都满足自动装配的条件时,Spring也不会尝试猜测哪一个构造器更适合使用。


最佳自动装配

当配置一个Bean的autowire属性为autodetect时,Spring将首先使用constructor自动装配,如果没有发现与构造器相匹配的Bean时,Spring将尝试使用byType自动装配。


3.1.2、默认自动装配

我们所需要做的仅仅是在根元素<beans>上增加一个default-autowire属性:

<span style="color:#009900;"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	</span><span style="color:#ff0000;">default-autowire="byType"</span><span style="color:#009900;">></span>

default-autowire应用于指定spring配置文件中的所有Bean,而不是应用于Spring应用上下文中的所有Bean。

你可以在一个Spring应用上下文中定义多个配置文件,每一个配置文件都可以有自己的默认自动装配策略。

同样,不能因为我们配置了一个默认的自动装配策略,就意味着所有的Bean都只能使用这个默认的自动装配策略。我们还可以使用<bean>元素的autowire属性来覆盖<beans>元素所配置的默认自动装配策略。



最小化Spring XML配置

标签:最小化spring xml配置

原文地址:http://blog.csdn.net/benjamin_whx/article/details/39268029

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!