2009-10-21 16 views
29

Gibt es eine Möglichkeit, im Frühjahr eine Eigenschaft festzulegen, nicht eine Instanz einer Klasse, sondern das Klassenobjekt selbst?Spring-Syntax zum Festlegen eines Klassenobjekts?

dh

Anstatt

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

gibt Ihnen eine Instanz von "Foo", so etwas wie:

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

edit: beste (Arbeits-) Lösung bisher - mit der normalen Instanziierung und leitet die Klasse im Setter. In Bezug auf die Lösungen ich denke, das wir dies als „Betrug“ beschreiben würde:

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


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

edit: dtsazza Methode auch funktioniert.

bearbeiten: pedromarce Methode funktioniert auch.

Antwort

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

Das sollte funktionieren.

0

Nein. Mit einem Bean-Tag weisen Sie Spring an, wie eine Klasse instanziiert wird.

0

Würde < Eigenschaft name = "x" Klasse = "a.b.c.Foo.class" > arbeiten? Das sollte eine Instanz einer Klasse-Objekt sein ...

+1

Nein, das gibt Ihnen einen ClassNotFound, da es keine definierte Foo.class-Klasse gibt. –

11

Sie sicherlich die static factory method Class.forName verwenden könnte(), wenn es keine elegantere Syntax (und ich glaube nicht, dass es):

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

Ich habe das aufgewertet, weil es wie ein guter Vorschlag schien. Komischerweise beschwert sich spring jedoch mit einer "ClassNotFoundException" für java.lang.Class. –

+0

Es macht nichts, dass diese Ausnahme auf eine Fehlkonfiguration zurückzuführen ist :) Funktioniert gut. –

Verwandte Themen