繁体   English   中英

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

[英]Spring Beans - how to wire null as a constructor arg?

我定义了以下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);

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

您可以使用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无法将您提到的有序值注入构造函数中。 如果你尝试使用显式排序,那就更好了

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM