在Spring中,“类型自动装配”的意思是如果一个bean的数据类型与其它bean属性的数据类型相同,将自动兼容装配它。
例如,一个“persion” bean 公开以“ability”类数据类型作为属性,Spring会找到ability类相同的数据类型,并自动装配它的Bean。如果没有匹配找到,它什么也不做。
可以通过自动装配 autowire="byType"象下面这样:
<!-- person has a property type of class "ability" --> <bean id="person" class="com.yiibai.common.Person" autowire="byType" /> <bean id="invisible" class="com.yiibai.common.Ability" > <property name="skill" value="Invisible" /> </bean>
看下面由Spring按类型自动装配的完整例子。
1. Beans
两个Bean,person 和 ability.
package com.yiibai.common; public class Person { private Ability ability; //... }
package com.yiibai.common; public class Ability { private String skill; //... }
2. Spring Wiring
通常情况下,明确地装配 bean:
<bean id="person" class="com.yiibai.common.Person"> <property name="ability" ref="invisible" /> </bean> <bean id="invisible" class="com.yiibai.common.Ability" > <property name="skill" value="Invisible" /> </bean>
输出
Person [ability=Ability [skill=Invisible]]
随着自动装配按类型启用后,可以保留ability属性未设置。Spring会发现相同的数据类型并自动装配它。
<bean id="person" class="com.yiibai.common.Person" autowire="byType" /> <bean id="invisible" class="com.yiibai.common.Ability" > <property name="skill" value="Invisible" /> </bean>
输出
Person [ability=Ability [skill=Invisible]]
如果你有两个Bean,都是类“ability”相同的数据类型?
<bean id="person" class="com.yiibai.common.Person" autowire="byType" /> <bean id="steal" class="com.yiibai.common.Ability" > <property name="skill" value="Steal" /> </bean> <bean id="invisible" class="com.yiibai.common.Ability" > <property name="skill" value="Invisible" /> </bean>
输出
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: ... No unique bean of type [com.yiibai.common.Ability] is defined: expected single matching bean but found 2: [steal, invisible]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.yiibai.common.Ability] is defined: expected single matching bean but found 2: [steal, invisible]
在这种情况下,它会打出 UnsatisfiedDependencyException 的错误消息。
注
在类型的自动装配模式,就必须确保只有Bean 只有一个唯一的数据类型声明。
下载源代码 – http://pan.baidu.com/s/1gdQFszD