Gelegentlich habe ich eine interessante Sache bemerkt:
Ich habe spring Converter
interface implementiert:
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?
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:
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.
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 ).
Tags und Links java spring generics spring-mvc autowired