Spring4-快速入门之在IOC容器中装配Bean

概述 Bean配置信息:
即Bean的元数据信息,包括Bean的实现类,属性信息,依赖关系和行为配置(生命周期及生命周期过程中的回调函数)
容器内部协作接口

Spring4-快速入门之在IOC容器中装配Bean

文章插图
首先,容器会根据Bean的配置信息,在容器内部建立Bean定义注册表(一个个对象),然后根据注册表实例化Bean,并建立Bean和Bean之间的依赖关系,最后将这些准备就绪的Bean放入缓存池中,供外部的应用程序使用
Bean基本配置
基于XML文件的配置方式如下

除了使用id为Bean命名,还可以使用name为Bean命名,name属性支持多个命名,可以使用空格,分号,或逗号分开

依赖注入
支持3种方式的注入,分别是属性注入,构造函数注入和工厂方法注入
属性注入
通过属性的()方法进行注入,要求Bean必须提供一个默认的构造函数,并为需要注入的属性提供()方法
public class Car {private String brand;private String color;private String maxSpeed;public void setBrand(String brand) {this.brand = brand;}public void setColor(String color) {this.color = color;}public void setMaxSpeed(String maxSpeed) {this.maxSpeed = maxSpeed;}public void introduce() {System.out.println("brand:" + this.brand + ";color:" + this.color + ";maxSpeed:" + this.maxSpeed);}}"brand" value="http://www.kingceram.com/post/影刺HT+">"color" value="http://www.kingceram.com/post/黑色">"maxSpeed" value="http://www.kingceram.com/post/300">
注意,只会检查Bean中是否有对应的方法,并不关心是否有该属性,例如上面Car类中有()方法,但却不一定要有brand属性
构造函数注入
使用构造函数注入,要求Bean必须提供带参数的构造函数 。例如上面的Car类,提供一个带参数的构造函数 。
public Car(String brand,String color,String maxSpeed) {this.brand = brand;this.color = color;this.maxSpeed = maxSpeed;}
bean.xml配置如下:

构造函数注入还提供按索引和按参数类型匹配入参的功能,可以使用-arg标签下的type属性和index属性配置 。
注意:循环依赖问题
考虑下面的例子:
Car类的构造函数
public Car(String brand,String color,String maxSpeed,Boss boss) {this.brand = brand;this.color = color;this.maxSpeed = maxSpeed;this.boss = boss;}
Boss类的构造函数
public Boss(String name,Car car) {this.name = name;this.car = car;}
bean.xml配置: