Spring Beans - 如何将null作为构造函数arg连接?

时间:2012-10-17 19:32:56

标签: java spring

我定义了以下bean:

<bean id="myBean" class="com.me.myapp.Widget">
    <constructor-arg name="fizz" value="null"/>
    <constructor-arg name="buzz" ref="someOtherBean" />
</bean>

当我运行我的应用程序时,Spring会抛出一个bean配置异常:

[java] Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myBean' defined in class path resource [spring-config.xml]:
Unsatisfied dependency expressed through constructor argument with index 0
of type [com.me.myapp.Widget]: Could not convert constructor argument value of
type [java.lang.String] to required type [com.me.myapp.Widget]: Failed to
convert value of type 'java.lang.String' to required type
'com.me.myapp.Widget'; nested exception is java.lang.IllegalStateException:
Cannot convert value of type [java.lang.String] to required
type [com.me.myapp.Widget]: no matching editors or conversion strategy found

我只想创建一个Widget,就像我写下面的Java一样:

Widget w = new Widget(null, someOtherBean);

我该怎么做?提前谢谢!

3 个答案:

答案 0 :(得分:84)

您可以使用Spring的<null>标记:

<bean id="myBean" class="com.me.myapp.Widget">
    <constructor-arg name="fizz">
            <null />
    </constructor-arg>
    <constructor-arg name="buzz" ref="someOtherBean" />
</bean>

答案 1 :(得分:2)

有时,spring无法将您提到的有序值注入构造函数中。如果你尝试使用显式排序,那就更好了,即

<constructor-arg index="0" name="fizz"><null/></constructor-arg> 
<constructor-arg index="1" name="buzz"><ref bean="someOtherBean"/></constructor-arg>

答案 2 :(得分:0)

实际上,这对我不起作用,

所以我所做的是,将对象传递给spring, 但询问“对象是否为空”,并创建新对象并将其分配给它,

它也做了一次(类似于春天), 区别在于,它不是最佳实践,而且对象的创建点在类的流程中,而不是在早期阶段。