我定义了以下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);
我该怎么做?提前谢谢!
答案 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, 但询问“对象是否为空”,并创建新对象并将其分配给它,
它也做了一次(类似于春天), 区别在于,它不是最佳实践,而且对象的创建点在类的流程中,而不是在早期阶段。