1.构造函数注入
构造函数注入是除属性注入外的另一种常用的注入方式,它保证一些必要的属性在Bean实例化时就得到设置,确保Bean在实例化后就可以使用。
1.1按类型匹配入参
如果任何可用的Car对象都必须提供brand和price的值,若使用属性注入方式,则只能人为地在配置时提供保证而无法在语法级提供保证,这时通过构造函数注入就可以很好地满足这一要求。使用构造函数注入的前提时Bean必须提供带参的构造函数。下面为Car提供一个可以设置brand和price属性的构造函数。
package com.example.servlet001.bean;
//默认构造函数和Setter
public class Car {
private int maxSpeed;
private String brand;
private Double price;
public Car(String brand,double price){
this.brand=brand;
this.price=price;
}
public void setBrand(String brand){
System.out.println("调用setBrand()设置属性。");
this.brand=brand;
}
public String getBrand(){
return this.brand;
}
public void setMaxSpeed(int maxSpeed){
this.maxSpeed=maxSpeed;
}
public void setPrice(Double price){
this.price=price;
}
public Double getPrice(){
return this.price;
}
}
构造函数注入的配置方式和属性注入的配置方式有所不同,下面在Spring配置文件中使用构造函数注入的配置方式装配这个Car Bean。代码清单如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="car1" name="car1" class="com.example.servlet001.bean.Car">
<constructor-arg type="java.lang.String">
<value>奥迪A10</value>
</constructor-arg>
<constructor-arg type="do