Wie werden generische Generatoren im Frühjahr automatisch gestartet?

8

Gelegentlich habe ich eine interessante Sache bemerkt:

Ich habe spring Converter interface implementiert:

%Vor%

Im Controller fahre ich es wie folgt

%Vor%

Überraschung, aber Spring inject richtige Klasse.

Nach meinen Informationen autingwird bohnen in der Laufzeit. Auch ich weiß, dass in Runtime generische Typen löschen.

Ich bin versucht, Spring soure zu verstehen, aber es ist schwer für mich.

Können Sie die Idee erklären, wie der Frühling diese Situation löst?

    
gstackoverflow 14.08.2015, 10:45
quelle

2 Antworten

5

Auch wenn das Löschen von Typen geschieht, einige der Typ-Parameter-Informationen werden nicht wirklich gelöscht, aber es wird an anderer Stelle zur Laufzeit beibehalten.

Für diese Klasse:

%Vor%

Die parametrisierten Typen für die Superschnittstelle ( Converter ) bleiben erhalten, weil die JVM wissen sollte, dass die kompilierte MyConverter eine abstrakte Methode mit einer Signatur implementiert, die diese beiden Typen tatsächlich enthält ( MyClass1 und MyClass2 ).

Um dies zu demonstrieren, können Sie das folgende Snippet in einer einfachen main -Methode ausprobieren - hier wird die parametrierte Information für das Super-Interface zur Laufzeit mit Reflection wiederhergestellt:

%Vor%

Diese reflektionsbezogenen Klassen ( Type , ParameterizedType usw.) sind diejenigen, die tatsächlich von der Spring verwendet werden. ResovableType Klasse, die verantwortlich ist für erkennen der beste Kandidat für die Verkabelung, basierend auf die bereitgestellten Typinformationen.

    
Konstantin Yovkov 14.08.2015, 11:06
quelle
2

Es ist wegen dem, was sie in ihrem Blogpost hier beschreiben .

Zitat,

  

Mit Spring Framework 4.0 wird Spring Generics automatisch als eine Form von @Qualifier betrachten. Hinter den Kulissen der neuen ResolvableType class bietet die Logik, mit generischen Typen zu arbeiten. Sie können es selbst verwenden, um einfach Typinformationen zu navigieren und aufzulösen.

Die Antwort ist also in diese Klasse und in this Klasse (und in diese Klasse ).

    
EpicPandaForce 14.08.2015 10:54
quelle