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


由于在使用构造函数注入时,Bean的入参引用的对象必须已经准备就绪,而这里的Car类和Boss类都使用了构造函数注入,而且都互相引用了对方,因此会发生循环依赖问题,两者都会等待对方实例化,就会出现类似线程死锁的问题,容器将不能启动成功 。
工厂方法注入 非静态工厂方法:
public Car getCar() {Car car = new Car();return car;}

静态工厂方法:
public static Car getCar2() {Car car = new Car();return car;}

注入方式的考量 选择构造函数注入的理由: 1.构造函数注入可以保证一些重要的属性在Bean实例化好之前就设置好,避免因为一些重要属性没有提供而导致一个无用Bean实例的情况 2.不需要为每个属性都设置方法,减少方法的数量 3.可以更好的封装类变量,避免外部错误的调用 不选择构造函数注入的理由: 1.如果类的属性过多,bean标签下的-arg标签也会增多,可读性差 2.灵活性不强,如果在有些属性是可选的情况下,通过构造函数注入需要传入null作为默认值 3.不利于类的继承和扩展,因为子类也需要引用父类的构造函数 4.会造成循环依赖问题 部分注入参数介绍
1.当注入的属性包含了XML的特殊字符时,可以使用

2.引用其他Bean
通过ref标签引用其他的Bean,ref标签包含两个属性,bean和,bean属性表示引用当前容器中的Bean,如果没有,则引用父容器中的Bean;属性表示引用父容器中的Bean 。
父容器bean.xml:

子容器bean2.xml:
New棉花糖Black>
3.内部Bean
内部Bean和Java的匿名内部类相似,没有名字,也不能被其他Bean引用,只能在声明处为外部Bean提供实例注入
【Spring4-快速入门之在IOC容器中装配Bean】New棉花糖>
4.null值

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

文章插图
通过标签为属性注入null值
New棉花糖>
5.级联属性
以圆点(.)的方式定义级联属性