Ich versuche Spring mit Scala zu benutzen. Ich weiß, dass Autowired mit der Scala-Klasse arbeitet, aber ich benutze ein Web-Framework, das ein Objekt benötigt, und ich möchte ein Dao in es einfügen. Ich frage mich, wie das geht? Sorry, ich bin ziemlich neu in Scala, vielen Dank im Voraus.
%Vor%Grundsätzlich haben Sie zwei Probleme:
Eigenschaft sollte veränderbar sein, d. h. var
anstatt val
Alle Methoden von Scala object
sind static
, während Spring Instanzmethoden erwartet. Eigentlich erstellt Scala eine Klasse mit Instanzmethoden namens UserRest$
hinter der Szene, und Sie müssen seine Singleton-Instanz UserRest$.MODULE$
für Spring verfügbar machen.
Spring kann Konfigurationen auf bereits vorhandene Singleton-Instanzen anwenden, sie sollten jedoch von einer Methode zurückgegeben werden, während UserRest$.MODULE$
ein Feld ist. Daher müssen Sie eine Methode zum Zurückgeben erstellen.
Also sollte so etwas funktionieren:
%Vor%.
%Vor% Sie können <property>
durch @Autowired
ersetzen, aber die manuelle Bean-Deklaration nicht durch @Service
ersetzen, da Probleme mit der oben beschriebenen Singleton-Instanz auftreten.
Siehe auch:
Alles, was wirklich notwendig ist, ist, dass Sie Ihr Objekt als eine Klasse und nicht als ein Objekt definieren. So wird Spring es instanziieren.
%Vor%Das Ändern von "val" in "var" ist nicht notwendig (Spring verwendet Reflektion, die Unveränderlichkeit ignoriert). Ich bin mir ziemlich sicher, dass diese @BeanProperty auch nicht notwendig ist (Spring wird dem zugrunde liegenden Feld reflektiv zuweisen).
axtavts Lösung hat bei mir nicht funktioniert, aber die verschiedenen Vorschläge aus den anderen Antworten zu kombinieren, halte ich für die eleganteste Lösung:
%Vor%Einige Anmerkungen:
Ich verwende AutowiredAnnotationBeanPostProcessor, um das Objekt zur Konstruktionszeit zu injizieren.
Zum Beispiel:
%Vor%Jetzt können Sie AppConfig.inject () verwenden, um Objekte einzufügen, deren Lebenszyklus nicht von Spring gesteuert wird. Zum Beispiel JPA Entities, etc.
Zusätzlich zu Ссылка ist es auch möglich, das scala Paketobjekt zum Spring-Kontext hinzuzufügen sowie scala object mit der Factory-Methode. Kompiliertes Paketobjekt ist die übliche Java-Klasse mit dem Namen package , sodass Sie es zum Spring-Kontext hinzufügen können. Danach haben Sie alle Möglichkeiten von Spring in diesem Objekt, zB @Autowired , @Value , manuelle Verdrahtung usw.
Testpaket:
%Vor%Und der Quellkontext xml ist:
%Vor%