2012-10-17 13 views
35

Mam następujący fasoli zdefiniowane:Wiosenne ziarna - jak null drut jako konstruktor arg?

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

Kiedy uruchamiam moją aplikację, Wiosna zgłasza wyjątek fasola config:

[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 

po prostu chcesz utworzyć Widget jak ja, gdybym napisał następujące Java:

Widget w = new Widget(null, someOtherBean); 

Jak mogę to zrobić? Z góry dziękuję!

Odpowiedz

74

Można użyć Wiosny <null> tag:

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

Czasami wiosna niepomyślnym wstrzyknąć wartości zamówionego zostały wymienione w konstruktorze. Jest lepiej, jeśli spróbujesz z wyraźną zamawiającego, tj

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

to było, właściwie nie działa na mnie,

więc co zrobiłem jest nie przekazanie obiektu przez sprężynę, ale pytając „czy obiekt jest null” i utworzyć nowy obiekt i przypisać ją do niego,

to również odbywa się raz (podobny do wiosny), różnicą jest to, że nie jest to praktyka najlepiej i punkt tworzenia obiektu znajduje się w przepływ klasy, a nie na wczesnym etapie.

Powiązane problemy