2009-10-21 16 views
29

Czy istnieje sposób, aby ustawić właściwość na wiosnę, a nie instancję klasy, ale sam obiekt klasy? tjSkładnia sprężyn do ustawiania obiektu klasy?

Zamiast

<bean> 
    <property name="prototype" class="a.b.c.Foo">... 

daje instancję "Foo", coś jak:

<bean> 
    <property name="prototype" class="java.lang.Class" value="a.b.c.Foo.class"... 

edit: najlepsze rozwiązanie (pracy) do tej pory - normalnie korzystać z instancji i czerpać klasa w seterce. Pod względem rozwiązań myślę, że chcemy opisać to jako „oszustwo”:

<bean class="Bar"> 
    <property name="prototype" class="a.b.c.Foo">... 


public class Bar{ 
     public void setPrototype(Object o){ 
       this.prototypeClass=o.getClass(); 

edit: metoda dtsazza za prace, jak również.

edytuj: Metoda pedromarce działa również.

Odpowiedz

37
<bean> 
    <property name="x"> 
     <value type="java.lang.Class">a.b.c.Foo</value> 
    </property> 
</bean> 

To powinno zadziałać.

0

Nie. Ze znacznikiem fasoli poinstruujesz Spring, jak utworzyć instancję klasy.

0

Czy < nazwa właściwości = "x" class = "a.b.c.Foo.class" > praca? To powinno być instancją obiektu klasy ...

+1

nie, to da ci ClassNotFound, ponieważ nie ma czegoś takiego jak zdefiniowana klasa Foo.class. –

11

Można oczywiście użyć static factory method Class.forName(), jeśli nie ma bardziej elegancki składnia (a nie wierzę, nie ma):

<property name="x"> 
    <bean class="java.lang.Class" factory-method="forName"> 
     <constructor-arg value="a.b.c.Foo"/> 
    </bean> 
</property> 
+0

Wziąłem to pod uwagę, ponieważ wydawało mi się to dobrą propozycją. Co dziwne, wiosna narzeka na "ClassNotFoundException" dla java.lang.Class. –

+0

Nieważne, wyjątek był spowodowany błędną konfiguracją :) Działa dobrze. –

Powiązane problemy