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

    技术2025-06-21  15

    在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!!!

    Processed: 0.016, SQL: 9