簡體   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