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>