2 Stimmen

Bean vom Typ Set<Class<?>> erstellen

Wie kann ich eine Bean vom Typ Class erstellen?

Ich habe einen Weg gefunden, indem ich getClass() verwende, aber das erfordert eine Instanz und kann nicht über die factory-Methode verwendet werden, da es nicht statisch ist. Es erfordert auch eine fremde Bean für diesen ausdrücklichen Zweck erstellt werden:

<bean id="foo" class="Foo" />
<bean id="fooClass" factory-bean="foo" factory-method="getClass" />

Dies ist nicht so schlimm, wenn die Klasse Foo einfach zu konstruieren ist, aber was ist, wenn der Konstruktor erforderliche Parameter hat?

Ich muss dann ein Set von Klasse erstellen, um eine andere Bean über eine Eigenschaft zu verdrahten. Ich würde das Set wie folgt erstellen:

<util:set id="classSet">
    <ref local="fooClass"/>
</util:set>

5voto

skaffman Punkte 389758

Wenn Sie das, was Sie beschreiben, wirklich machen wollen, dann können Sie es so machen:

<bean id="myClass" class="java.lang.Class" factory-method="forName">
   <constructor-arg value="com.MyClass"/>
</bean>

Aber wie @ChssPly76 sagte, wenn Sie es in eine andere Bean injizieren möchten, müssen Sie nur den Klassennamen injizieren, und Spring wird es automatisch in eine Klasseninstanz für Sie konvertieren.

4voto

ChssPly76 Punkte 97241

Warum sollten Sie? Können Sie ein Beispiel nennen, wo das tatsächlich nötig ist?

Wenn Sie dies nur als Abhängigkeit benötigen (z.B. eine andere Bean hat eine Eigenschaft des Typs Class), würde der in Spring eingebaute ClassEditor-Eigenschaftseditor eine normale Zeichenkette für Sie in eine Class-Instanz mit diesem Namen umwandeln:

<property name="someClass" value="java.lang.String"/>

Dies würde zu folgenden Ergebnissen führen setSomeClass(Class clazz) Setter, der auf der Bean aufgerufen wird, deren Eigenschaft dies ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X