春豆 – 如何将null作为构造函数arg?

我定义了下面的bean:

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

当我运行我的应用程序时,Spring引发一个beanconfigurationexception:

 [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 

我只是想创build一个Widget就像我会写如下的Java:

 Widget w = new Widget(null, someOtherBean); 

我怎样才能做到这一点? 提前致谢!

你可以使用Spring的<null>标签:

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

有时候spring不能将你提到的顺序的值注入到构造函数中。 如果你尝试明确的sorting,比如更好

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

这其实并不适合我,

所以我所做的是通过spring传递对象,而是询问“对象是否为null”,并创buildNew对象并将其分配给它,

也是一次(类似于spring),不同之处在于,这不是最好的做法,而是客体的创作点在阶级的stream动中,而不是在早期阶段。