一、Spring 配置Bean
1.1 依赖注入有两种办法
- 属性注入(设值注入)
- 构造器注入
1.2 构造器注入的小示例
创建一个对象,并提供一些构造器,覆写一下toString方法:
package com.lbh.spring.beans;
public class Car {
private String brand;
private String corp;
private double price;
private int maxSpeed;
public Car(String brand, String corp, double price, int maxSpeed) {
super();
this.brand = brand;
this.corp = corp;
this.price = price;
this.maxSpeed = maxSpeed;
}
public Car(String brand, String corp, double price) {
super();
this.brand = brand;
this.corp = corp;
this.price = price;
}
@Override
public String toString() {
return "牌子:"+this.brand+"厂子:"+this.corp+"价格:"+this.price+"速度:"+this.maxSpeed;
}
}
配置文件里面运用构造器注入配置如下:
<!-- 通过构造器方法来配置 bean 的属性 --> <bean id="car" class="com.lbh.spring.beans.Car"> <constructor-arg value="宝马" index="0"></constructor-arg> <constructor-arg value="武汉" index="1"></constructor-arg> <constructor-arg value="1000" index="2"></constructor-arg> <constructor-arg value="200" index="3"></constructor-arg> </bean>经过实验,如果不加index,那么注入过程按照由上到下的属性顺序进行;如果加上index那么按照index标号来,但如果对象中并没有相应的构造器方法,那么输出会报错。除了根据index判断,还可以根据type判断。
使用构造器注入,可以通过指定参数位置和类型,以区分重载的构造器
注:当Bean唯一时,可以通过getBean(Car.class);的形式获得该Bean对象,如果不唯一,则只能通过getBean("helloworld")的形式获取。
如:配置两个Car的Bean,用 getBean(Car.class);会报出:
No qualifying bean of type 'com.lbh.spring.beans.Car' available: expected single matching bean but found 2: car,car2
car和car2两个Bean的值故意设置不同,打印后发现两个Bean分别调用了Car方法的两个构造器,输出了两个Bean的属性信息,如下: