Spring由類型(Type)自動裝配

在Spring中,“類型自動裝配”的意思是如果一個bean的數據類型與其它bean屬性的數據類型相同,將自動相容裝配它。
例如,一個“persion” bean 公開以“ability”類數據類型作為屬性,Spring會找到ability類相同的數據類型,並自動裝配它的Bean。如果沒有匹配找到,它什麼也不做。
可以通過自動裝配 autowire="byType"象下麵這樣:
<!-- person has a property type of class "ability" -->
	<bean id="person" class="com.xuhuhu.common.Person" autowire="byType" />

	<bean id="invisible" class="com.xuhuhu.common.Ability" >
		<property name="skill" value="Invisible" />
	</bean>
看下麵由Spring按類型自動裝配的完整例子。

1. Beans

兩個Bean,person 和 ability.
package com.xuhuhu.common;

public class Person
{
	private Ability ability;
	//...
}
package com.xuhuhu.common;

public class Ability
{
	private String skill;
	//...
}

2. Spring Wiring

通常情況下,明確地裝配 bean:
<bean id="person" class="com.xuhuhu.common.Person">
		<property name="ability" ref="invisible" />
	</bean>

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

輸出

Person [ability=Ability [skill=Invisible]]
隨著自動裝配按類型啟用後,可以保留ability屬性未設置。Spring會發現相同的數據類型並自動裝配它。
<bean id="person" class="com.xuhuhu.common.Person" autowire="byType" />

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

輸出

Person [ability=Ability [skill=Invisible]]
如果你有兩個Bean,都是類“ability”相同的數據類型?
<bean id="person" class="com.xuhuhu.common.Person" autowire="byType" />

	<bean id="steal" class="com.xuhuhu.common.Ability" >
		<property name="skill" value="Steal" />
	</bean>

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

輸出

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException:
...
No unique bean of type [com.xuhuhu.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.xuhuhu.common.Ability] is defined:
expected single matching bean but found 2: [steal, invisible]
在這種情況下,它會打出 UnsatisfiedDependencyException 的錯誤消息。

在類型的自動裝配模式,就必須確保只有Bean 只有一個唯一的數據類型聲明。

下載源代碼 – http://pan.baidu.com/s/1gdQFszD

上一篇: Spring自動裝配Beans 下一篇: Spring由名稱(Name)自動裝配