IoC容器默认只会调用无参构造,我们自己创建的有参构造需要使用 constructor-arg 标签定义:

<bean name="teacher" class="com.test.bean.ArtTeacher"/>
<bean name="student" class="com.test.bean.Student">
    <constructor-arg name="teacher" ref="teacher"/>
    <constructor-arg value="1" name="age"/>
    <constructor-arg value="1" type="int"/>
</bean>

这里的constructor-arg就是构造方法的一个参数,这个参数可以写很多个,会自动匹配符合里面参数数量的构造方法,这里匹配的就是我们刚刚编写的需要一个参数的构造方法。

显然此时也可以利用自定义构造方法来实现 property 依赖注入 的功能。

指定类型

普通类型

指定变量名:

<constructor-arg value="1" name="age"/>

也可以指定类型。

<constructor-arg value="1" type="int"/>

property 依赖

<constructor-arg name="teacher" ref="teacher"/>

此时就会将该类的依赖类teacher构造为”teacher” bean 指代的对象。

集合类型

集合类型如List,Map存在特殊的支持,可以初始化一些参数:

<bean name="student" class="com.test.bean.Student">
  	<!--  对于集合类型,我们可以直接使用标签编辑集合的默认值  -->
    <property name="list">
        <list>
            <value>AAA</value>
            <value>BBB</value>
            <value>CCC</value>
        </list>
    </property>
</bean>

Map:

<bean name="student" class="com.test.bean.Student">
    <property name="map">
        <map>
            <entry key="语文" value="100.0"/>
            <entry key="数学" value="80.0"/>
            <entry key="英语" value="92.5"/>
        </map>
    </property>
</bean>