自动装配分有4种方法
1.byName :
如果属性名相同,就会去查找对应的set方法注入,如果没有。也不会出异常,对象为null
public class B{ }
public class A{
private B b;
public void setB(B b){
this.b = b
}
}
di.xml
<bean id="a" class="A" autowire="byName">
<bean id="b" class="B"/>
2.byType:
如果类型相同,就会去查询对应的set方法注入,如果没有,也不会出异常,对象为null
public class B{}
public class A{
private B b;
private B b2;
public void setB(B b){
this.b = b;
}
public void setB2(B b2){
this.b2= b2;
}
}
di.xml
<bean id="b" class="B"/> <bean id="a" class="A" autowrie="byType"/>
3.constructor:
如果属性名在di.xml中有配置,同时也有相同参数的构造方法,则会通过构造方法注入,找不到匹配的会出异常
public class B{}
public class A{
private B b;
private B b2;
public A(B b){
this.b = b;
}
}
di.xml
<bean id="b" class="B"/> <bean id="a" class="A" autowrie="constructor"/>
4.autodetect
在constructor与byType中选择。如果有一个无参的构造,则会选择byType方式,反则选择constructor方式
在小型的项目中可以方便的使用。但在大型的项目中就要避免自动装配。因为它虽然可以减少开发配置,当缺乏灵活性。也有相应的缺陷。大家慎重使用。