Spring由類型(Type)自動裝配

在Spring中,「類型自動裝配」的意思是如果一個bean的數據類型與其它bean屬性的數據類型相同,將自動兼容裝配它。

例如,一個「persion」 bean 公開以「ability」類數據類型作爲屬性,Spring會找到ability類相同的數據類型,並自動裝配它的Bean。如果沒有匹配找到,它什麼也不做。

可以通過自動裝配 autowire="byType"象下面這樣:

<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="invisible" class="com.yiibai.common.Ability" >
    <property name="skill" value="Invisible" />
</bean>

輸出

Person [ability=Ability [skill=Invisible]]

隨着自動裝配按類型啓用後,可以保留ability屬性未設置。Spring會發現相同的數據類型並自動裝配它。

<bean id="invisible" class="com.yiibai.common.Ability" >
    <property name="skill" value="Invisible" />
</bean>

輸出

Person [ability=Ability [skill=Invisible]]

如果你有兩個Bean,都是類「ability」相同的數據類型?

<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