为什么通过配置文件为构造函数函数传参显示错误
我用spring框架的,在配置文件中写了两个bean的定义,一个是用set()方法,运行没有问题。另一个是用<constructor-arg>构造函数传参的,显示main...
我用spring框架的,在配置文件中写了两个bean的定义,一个是用set()方法,运行没有问题。 另一个是用<constructor-arg>构造函数传参的,显示main函数有错
展开
1个回答
展开全部
你的代码预计配置文件的内容我不是很清楚,我在这里只能说说具体的构造函数传参数值的具体事项: 希望对你有所帮助,尽快找到出错的地方: 使用构造子注入时,则使用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>
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询