一 Bean的依赖注入
(1)属性依赖注入
属性依赖注入要求Bean类提供一个默认的构造函数,并为需要注入的属性提供对应的setter方法,Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用setter方法注入属性值。
如下例子,提供了默认构造函数和属性的setter方法:
public class Car {
private String brand;
private String color;
private int maxspeed;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getMaxspeed() {
return maxspeed;
}
public void setMaxspeed(int maxspeed) {
this.maxspeed = maxspeed;
}
}
在spring配置文件中的配置片段:
<bean id="car" class="com.smart.domain.Car">
<property name="brand"><value>红旗</value></property>
<property name="color"><value>红</value></property>
<property name="maxspeed"><value>200</value></property>
</bean>
综上所述,Bean的每一个属性对应一个<property>标签,name为属性的名称.需要注意的是,spring只会检查Bean中是否有对应的Setter方法,至于Bean中是否有对应的属性变量则不做要求.但是在一般情况下,还是按照约定俗成的方式在Bean中提供同名的属性变量.
(2) 构造函数注入
构造函数注入保证一些必要的属性在Bean实例化时就得到设置,并且确保Bean实例化后则可以使用,其中构造函数注入又可以分为按类型匹配入参、按索引匹配入参、联合使用类型和索引匹配入参这三种.构造函数注入使用前提是必须提供带参的构造函数.
1)按类型匹配入参
public class Car {
private String brand;
private String color;
private int maxspeed;
public Car1(String brand,int maxspeed){
this.brand=brand;
this.maxspeed=maxspeed;
}
}
Spring中的配置文件片段:
<bean id="car2" class="com.smart.domain.Car">
<constructor-arg type="java.lang.String"><value>红旗</value></constructor-arg>
<constructor-arg type="int" ><value>20000</value></constructor-arg>
</bean>
2)按索引匹配入参
试想,如果构造函数中的入参全是String类型,那么这时候我们怎么对应入参的顺序呢?这时候,我们就需要使用索引匹配入参了.
public class Car{
private String brand;
private String color;
private int maxspeed;
public Car1(String brand,String color,int maxspeed){
this.brand=brand;
this.color=color;
this.maxspeed=maxspeed;
}
}
Spring配置文件中的配置片段为:
<bean id="car2" class="com.smart.domain.Car">
<constructor-arg index="0"><value>红旗</value></constructor-arg>
<constructor-arg index="1"><value>黑色</value></constructor-arg>
<constructor-arg index="2"><value>20000</value></constructor-arg>
</bean>
3)联合使用类型和索引匹配入参
如果一个Bean类拥有两个重载的构造函数,他们都拥有三个入参,如果仅用类型匹配或者索引匹配都不能满足要求。如下所示:
public class Car1 {
private String brand;
private String color;
private int maxspeed;
private double corp;
public Car1(String brand,String color,int maxspeed){
this.brand=brand;
this.color=color;
this.maxspeed=maxspeed;
}
public Car1(String brand,String color,double crop){
this.brand=brand;
this.color=color;
this.corp=crop;
}
}
Spring配置文件中德配置片段为:
<bean id="car2" class="com.smart.domain.Car">
<constructor-arg type="java.lang.String" index="0"><value>红旗</value></constructor-arg>
<constructor-arg type="java.lang.String" index="1"><value>黑色</value></constructor-arg>
<constructor-arg type="int" index="2"><value>20000</value></constructor-arg>
</bean>
- 未完待续!