在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)自動裝配