spring bean 的配置-不同构造函数

来源:互联网 发布:年轻人不愿生了知乎 编辑:程序博客网 时间:2024/06/06 05:14

 使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数。

<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
<constructor-arg>
<value>This is a configurable message</value>
</constructor-arg>
</bean>

 当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始。

<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
<constructor-arg index="0">
<value>first parameter</value>
</constructor-arg> <constructor-arg index="1">
<value>second parameter</value>
</constructor-arg>

</bean>

在使用构造子注入时,需要注意的问题是要避免构造子冲突的情况发生。

考虑下面的情况:

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>

原创粉丝点击