spring学习笔记-IOC容器如何为对象进行初始化赋值
在IOC容器中初始化对象有两种方式,一种是使用property调用set方法进行初始化赋值,另一种是调用constructor-arg调用有参构造器进行初始化赋值1.在bean中使用property调用set进行初始化赋值在bean中使用property标签进行初始化赋值,这种赋值方式会调用bean对象中的set方法进行赋值操作,它会先调用无参构造器创建对象,然后调用set方法进行赋值操作验证测试
在IOC容器中初始化对象有两种方式,一种是使用property调用set方法进行初始化赋值,另一种是调用constructor-arg调用有参构造器进行初始化赋值
1.在bean中使用property调用set进行初始化赋值
在bean中使用property标签进行初始化赋值,这种赋值方式会调用bean对象中的set方法进行赋值操作,它会先调用无参构造器创建对象,然后调用set方法进行赋值操作
验证测试:
添加无参构造器和打印输出,为set方法添加打印输出
使用property进行初始化赋值
在test中进行对象获取
<bean id="User" class="com.hao.spring.user.User">
<property name="userName" value="qianghao"></property>
<property name="sex" value="man"></property>
<property name="age" value="25"></property>
</bean>
2.在bean中使用constructor-arg调用有参构造器完成初始化赋值
使用constructor-arg会调用有参构造器,在创建对象的同时,完成初始化赋值的操作
验证测试:
创建有参构造器并添加打印输出
使用constructor-arg进行初始化赋值
在test中进行对象获取
<bean id="constructor-user" class="com.hao.spring.user.User">
<constructor-arg name="userName" value="qianghao"></constructor-arg>
</bean>
3.constructor-arg标签属性说明
在constructor-arg标签中有index,name,ref,type这4个属性
- index: 指定该参数为形参中的第几个参数赋值,下标从0开始
- name: 指定该参数为形参中的哪个参数赋值
- ref: 引用IOC容器中的其他外部对象
- type 指定改参数为哪种数据类型的参数赋值
4. 使用constructor-arg需要注意的问题
4.1. 当我们不指定name时,需要注意参数顺序
当我们不指定参数的name时,spring会根据我们在property中指定的参数按顺序为对象赋值,所以如果参数顺序写错了很容易出现下面的错误,而当指定name后会根据name进行定向赋值,就不需要关系参数的顺序了,所以如果需要在IOC容器中进行显示的初始化赋值,用name!!!用name!!!用name!!!
4.2. 当我们不指定name时,还可以指定type,进行指定参数类型的赋值
当我们用type指定了数据类型时,只要我们的value和type的类型保持一致就可以不用但是上面的类型转换异常的错误的,使用type相当于是对形参进行了一个分组,然后IOC会根据顺序将值赋给参数。
所以你会发现我们还是需要注意相同类型的参数的顺序,否则可能赋值还是会错,所以如果需要在IOC容器中进行显示的初始化赋值,用name!!!用name!!!用name!!!
4.3. 当我们不指定name也不指定type时,我们可以使用index,去指定该参数赋值给第几个形参
这个方式是最接近name的方式,因为我们可以确定的指定该value会赋值给哪个参数。但是…emmm…用name!!!用name!!!用name!!!
更多推荐
所有评论(0)