- 构造函数注入是除属性注入外另一种常用的属性注入方法,它保证一些必要的属性在Bean实例化的时候就得到设置,确保Bean实例化后就可以使用。
- 来看个栗子吧
Car类
package spring.springConstructorDemo;
public class Car {
private String brand;
private double price;
public Car(String brand, double price) {
this.brand = brand;
this.price = price;
}
@Override
public String toString() {
return price + "的" + brand;
}
}
People类
package spring.springConstructorDemo;
public class People {
private String name;
private Car car;
public People(String name, Car car) {
this.name = name;
this.car = car;
}
public void run() {
System.out.println(name + "骄傲地开着它价值" + car);
}
}
两个类都提供了一个带参的构造方法,因此可以进行构造函数注入
<bean id="car" class="spring.springConstructorDemo.Car">
<constructor-arg type="java.lang.String">
<value>萨博</value>
</constructor-arg>
<constructor-arg index="1">
<value>500000</value>
</constructor-arg>
</bean>
<bean id="people" class="spring.springConstructorDemo.People">
<constructor-arg type="java.lang.String">
<value>欧维</value>
</constructor-arg>
<constructor-arg type="spring.springConstructorDemo.Car">
<ref bean="car"></ref>
</constructor-arg>
</bean>
构造函数注入可以根据入参的类型或索引进行匹配,多个相同类型入参时,建议用索引
测试:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
People people = (People)ctx.getBean("people");
people.run();
}