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