45

次の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);

これどうやってするの?前もって感謝します!

4

3 に答える 3

89

Springの<null>タグを使用できます。

<bean id="myBean" class="com.me.myapp.Widget">
    <constructor-arg name="fizz">
            <null />
    </constructor-arg>
    <constructor-arg name="buzz" ref="someOtherBean" />
</bean>
于 2012-10-17T19:36:09.883 に答える
3

Springは、言及した順序の値をコンストラクターに挿入できない場合があります。明示的な順序付けを試してみるとよいでしょう。

<constructor-arg index="0" name="fizz"><null/></constructor-arg> 
<constructor-arg index="1" name="buzz"><ref bean="someOtherBean"/></constructor-arg>
于 2012-10-17T19:39:46.200 に答える
0

これは、実際には、私にとってはうまくいきませんでした、

つまり、私が行ったことは、オブジェクトをSpringに渡すのではなく、「オブジェクトがnullかどうか」を尋ね、新しいオブジェクトを作成して割り当てることです。

これも1回実行されます(春と同様)。違いは、これはベストプラクティスではなく、オブジェクトの作成ポイントはクラスのフローにあり、初期段階ではないということです。

于 2013-04-28T15:30:57.810 に答える