Spring的自动装配就是将一个bean注入到其它bean的property中去。
除了ref引用方式,Spring有如下四种自动装配方式:
Auto-Wiring byName
Auto-Wiring byType
Auto-Wiring constructor
Auto-Wiring autodetect
sister.java如下:
package com.sureSand;
public class Sisiter
{
private Girl girl;
public Sister(Girl girl) {
this.girl = girl;
}
public void setSisiter(Girl girl) {
this.girl = girl;
}
//...
}
girl.java如下:
package com.sureSand;
public class Girl
{
//...
}
1.我们先看一下正常的“ref”方式来装配bean:
<bean id="sister" class="com.sureSand.Sister">
<property name="girl" ref="girl" />
</bean>
<bean id="girl" class="com.sureSand.Girl" />
这种装配方式很容易看的出来将bean girl装配到bean sister中。
2.Auto-Wiring byName’
<bean id="sister" class="com.sureSand.Sister" autowire="byName" />
<bean id="girl" class="com.sureSand.Girl" />
根据属性property的名字来装配bean,因为bean sister的的property name与bean girl中的id相同,spring会自动装配bean girl到bean sister中的property中去。
3.Auto-Wiring byT
根据属性property的数据类型来装配bena,bean sister中property数据类型和bean girl中的id数据类型相同,spring会自动装配bean girl到bean sister中的property中去。
但是一旦有两种及以上相同数据类型的bean girl被配置,将抛出UnsatisfiedDependcyException异常。
所以,一旦选择了’byType’类型的自动装配,请确认你的配置文件中每个数据类型定义一个唯一的bean。
4.Auto-Wiring ‘constructor’
<bean id="sister" class="com.sureSand.Sister" autowire="constructor" />
<bean id="girl" class="com.sureSand.Girl" />
这种情况下,Spring会寻找与参数数据类型相同的bean,通过构造函数public Customer(Person person)将其注入。5.Auto-Wiring ‘autodetect’
<bean id="sister" class="com.sureSand.Sister" autowire="autodetect" />
<bean id="girl" class="com.sureSand.Girl" />
这种情况下,Spring会先寻找Customer中是否有默认的构造函数,如果有相当于上边的’constructor’这种情况,用构造函数注入,否则,用’byType’这种方式注入,所以,此例中通过调用public Customer(Person person)将其注入。
大家可以明显感觉到自动装配的开发速度比手动快,但是在维护或者别人来查看代码时常常要找这个bean被装配到了哪里,不是很直观,甚至不知道哪一个bean注入到哪一个bean里,请根据实际情况选择装配方式。