一、使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数。 java
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider"> spring
<constructor-arg> ide
<value>This is a configurable message</value> 函数
</constructor-arg> spa
</bean> code
二、当构造函数有多个参数时,能够使用constructor-arg标签的index属性,index属性的值从0开始。 blog
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider"> ci
<constructor-arg index="0"> string
<value>first parameter</value> io
</constructor-arg>
<constructor-arg index="1">
<value>second parameter</value>
</constructor-arg>
</bean>
三、 在使用构造子注入时,须要注意的问题是要避免构造子冲突的状况发生。考虑下面的状况:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public
class
ConstructorConfusion {
public
ConstructorConfusion(String someValue) {
System.out.println(
"ConstructorConfusion(String) called"
);
}
public
ConstructorConfusion(
int
someValue) {
System.out.println(
"ConstructorConfusion(int) called"
);
}
}
|
使用以下配置文件
<bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
<constructor-arg>
<value>90</value>
</constructor-arg>
</bean>
那 么,当实例化组件constructorConfusion时,将输出ConstructorConfusion(String) called,也就是 说参数类型为String的构造函数被调用了,这显然不符合咱们的要求。为了让Spring调用参数为int的构造函数来实例化组件 constructorConfusion,咱们须要在配置文件中明确的告诉Spring,须要使用哪一个构造函数,这须要使用constructor- arg的type属性。
<bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
<constructor-arg type="int">
<value>90</value>
</constructor-arg>
</bean>