spring学习笔记-IOC容器如何为对象进行初始化赋值

在IOC容器中初始化对象有两种方式,一种是使用property调用set方法进行初始化赋值,另一种是调用constructor-arg调用有参构造器进行初始化赋值spring学习笔记-IOC容器如何为对象进行初始化赋值_第1张图片

1.在bean中使用property调用set进行初始化赋值

在bean中使用property标签进行初始化赋值,这种赋值方式会调用bean对象中的set方法进行赋值操作,它会先调用无参构造器创建对象,然后调用set方法进行赋值操作
验证测试:
添加无参构造器和打印输出,为set方法添加打印输出spring学习笔记-IOC容器如何为对象进行初始化赋值_第2张图片
使用property进行初始化赋值
spring学习笔记-IOC容器如何为对象进行初始化赋值_第3张图片
在test中进行对象获取
spring学习笔记-IOC容器如何为对象进行初始化赋值_第4张图片


            
            
            
 

2.在bean中使用constructor-arg调用有参构造器完成初始化赋值

使用constructor-arg会调用有参构造器,在创建对象的同时,完成初始化赋值的操作
验证测试:
创建有参构造器并添加打印输出spring学习笔记-IOC容器如何为对象进行初始化赋值_第5张图片
使用constructor-arg进行初始化赋值
spring学习笔记-IOC容器如何为对象进行初始化赋值_第6张图片
在test中进行对象获取
spring学习笔记-IOC容器如何为对象进行初始化赋值_第7张图片


            

spring学习笔记-IOC容器如何为对象进行初始化赋值_第8张图片
spring学习笔记-IOC容器如何为对象进行初始化赋值_第9张图片

3.constructor-arg标签属性说明

在constructor-arg标签中有index,name,ref,type这4个属性
spring学习笔记-IOC容器如何为对象进行初始化赋值_第10张图片

  • index: 指定该参数为形参中的第几个参数赋值,下标从0开始
  • name: 指定该参数为形参中的哪个参数赋值
  • ref: 引用IOC容器中的其他外部对象
  • type 指定改参数为哪种数据类型的参数赋值

4. 使用constructor-arg需要注意的问题

4.1. 当我们不指定name时,需要注意参数顺序

当我们不指定参数的name时,spring会根据我们在property中指定的参数按顺序为对象赋值,所以如果参数顺序写错了很容易出现下面的错误,而当指定name后会根据name进行定向赋值,就不需要关系参数的顺序了,所以如果需要在IOC容器中进行显示的初始化赋值,用name!!!用name!!!用name!!!
spring学习笔记-IOC容器如何为对象进行初始化赋值_第11张图片
4.2. 当我们不指定name时,还可以指定type,进行指定参数类型的赋值

当我们用type指定了数据类型时,只要我们的value和type的类型保持一致就可以不用但是上面的类型转换异常的错误的,使用type相当于是对形参进行了一个分组,然后IOC会根据顺序将值赋给参数。
所以你会发现我们还是需要注意相同类型的参数的顺序,否则可能赋值还是会错,所以如果需要在IOC容器中进行显示的初始化赋值,用name!!!用name!!!用name!!!
spring学习笔记-IOC容器如何为对象进行初始化赋值_第12张图片
4.3. 当我们不指定name也不指定type时,我们可以使用index,去指定该参数赋值给第几个形参
这个方式是最接近name的方式,因为我们可以确定的指定该value会赋值给哪个参数。但是…emmm…用name!!!用name!!!用name!!!spring学习笔记-IOC容器如何为对象进行初始化赋值_第13张图片

你可能感兴趣的:(spring,spring,java)