Konvertierungsservice in einen benutzerdefinierten Konverter einspeisen

8

Verwenden von Spring mvc-3. Ich schreibe einen benutzerdefinierten Konverter, der Zugriff auf andere Konverter benötigt, die in einem ConversionService registriert sind.

Wie kann ich das erreichen? Ich habe versucht, meinen benutzerdefinierten Konverter wie folgt zu schreiben:

%Vor%

Und ich habe meinen benutzerdefinierten Konverter über applicationContext.xml registriert

%Vor%

Spring weigert sich jedoch, Service in meinen CustomConverter zu injizieren (es ist immer Null). Wie kann ich das erreichen?

Danke!

    
Ajay 01.12.2011, 04:03
quelle

4 Antworten

5

Ich habe kürzlich so etwas verwendet, um dieses Problem zu lösen. Verwenden Sie eine benutzerdefinierte Factory:

%Vor%

was wie folgt erklärt wird:

%Vor%     
nmervaillie 06.01.2012, 10:29
quelle
6

Ich bin auf dasselbe Problem gestoßen. Es gibt ein Problem SPR-6415 in Spring JIRA, das dieses Problem behandelt. Ich gebe hier meine Lösung basierend auf der Diskussion in dieser Ausgabe. Es ist das gleiche Prinzip wie die Antwort von @nmervaillie, aber Sie müssen nicht Ihr eigenes ConversionServiceFactoryBean implementieren.

%Vor%     
michal.kreuzman 15.08.2013 09:33
quelle
0

Hauptproblem (das ich gesehen habe) ist, wenn Sie ConversionServiceFactoryBean für den Aufbau von conversion service verwenden, das Konverter enthält, die conversion service verwenden, und Sie erhalten einen Fehler wegen ConversionServiceFactoryBean.getObject Methode, die eine Instanz von% liefert co_de% wird vor conversion service aufgerufen, wenn diese Konvertierungsserviceinstanz tatsächlich erstellt wurde.

Also Um dieses Verhalten zu vermeiden müssen Sie nur erstellen, um ConversionServiceFactoryBean.afterPropertiesSet vor conversion service heißt zu erstellen. Ich habe es im Konstruktor der Klasse gemacht, die ConversionServiceFactoryBean.getObject erweitert. Beispiel:

%Vor%

Dann können Sie Konverter verwenden, die auch ConversionServiceFactoryBean verwenden. Hoffe es hilft.

    
nndru 08.10.2015 16:50
quelle
0

Ich habe dieses Problem in der zentrischen Anwendung im Frühjahr gelöst. Die Hauptkomponenten dieser Lösungen sind:

  • Deklaration von Converter-Implementierungen als Spring Beans
  • mit @Lazy aus dem Federkontext an den Einspritzpunkten in den Konvertern
  • injiziert alle erkannten Konverter in eine ConversionServiceFactoryBean

SampleConverter

%Vor%

und die Konfiguration:

%Vor%

...

Die @Lazy-Annotationen umgehen das Egg-Chicken-Problem, indem sie einen Proxy injizieren und so die Auflösung der Konvertierungsservice-Bean verzögern, bis sie wirklich genutzt wird.

    
thp 09.04.2016 11:57
quelle

Tags und Links