spring配置bean中的自动装配

来源:互联网 发布:linux find 结合正则 编辑:程序博客网 时间:2024/05/16 01:25

在我们传统的配置bean的时候,属性往往是我们手动加入的

<bean id="p5" class="com.my.beans.People" p:age="33" p:name="lisi" p:cars-ref="car">
</bean>

都是手动加入的;自动装配就是我们不需要使用p:cars-ref="car"这种方式去赋值而是用配置某种方式让容器自动去装入bean属性的值。

IoC容器可以帮我们自动装入bean,我们需要做的就是在autowire-candidate=""中指定自动装入的方式,可以去byType,byName

byType:根据类型进行装配,如果容器中有多个相同类型的bean。则不可使用byType

byName:根据名称自动装配,必须将目标bean的id值和当前beand 属性和名称设置的完全相同

传统的是:<property name="add" ref="address"></property>使用了ref引用

<bean id="address" class="com.my.autoAwear.Address">
<property name="city" value="beijiang"></property>
<property name="street" value="wangiang"></property>
</bean>

<bean id="car" class="com.my.autoAwear.Car">
<property name="brand" value="baoma"></property>
<property name="pirce" value="563256"></property>
</bean>
<bean id="person" class="com.my.autoAwear.Person">
<property name="name" value="zhangsan"></property>
<property name="car" ref="car"></property>
<property name="add" ref="address"></property>
</bean>

在person bean中:

public class Person {
private String name;
private Address add;
private Car car;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAdd() {
return add;
}
public void setAdd(Address add) {
this.add = add;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "Person [name=" + name + ", add=" + add + ", car=" + car + "]";
}

省略Address,Car...

现在开始自动装配:

把person的bean改为:删掉最后的引用,bean添加 autowire="byName",

<bean id="person" class="com.my.autoAwear.Person" autowire="byName">
<property name="name" value="zhangsan"></property>
<property name="car" ref="car"></property>
</bean>

原理是car address的bean的id是car,address,而且在person中有属性名Car car 和Address address。所有容器可以根据名字找到容器中id为car和address的对应bean去匹配person bean中setter 方法是属性名,car 和address,所以实现匹配。如果id和主bean中属性名不一致,则装入失败。

byType是根据bean的类型和当前bean的属性的类型进行自动装配。

0 0