Wie ordnet Spring 2.5 die eingehenden Anforderungsdaten dem ModelAttribute-Befehl zu?
-
03-07-2019 - |
Frage
Ich habe Spring 2.0 verwendet und verwende jetzt Spring 2.5. Natürlich hat Spring 2.5 den Web-Controllern das Leben sehr erleichtert.Mir kommt immer wieder die Frage in den Sinn, dass wir in 2.0 die Befehlsklasse und dementsprechend den AbstractFormController festlegen mussten, der zum Auffüllen dieses Befehlsobjekts für uns verwendet wurde.In Spring 2.5 machen wir das nicht. Woher wissen wir also, welche Klasse wir verwenden sollen?Hängt es von der Art des Parameters ab, dem wir @ModelAttribute("command") mit Anmerkungen versehen haben?
Wenn ja, teilen Sie mir bitte eine „Utils“-Klasse mit, die den genauen Mechanismus bereitstellt, mit dem ich HttpRequest und den Klassennamen (oder das Klassenobjekt) übergeben kann und der mir das ausgefüllte Objekt zurückgibt!
Ich hoffe, Sie haben meine Frage verstanden.
Dank im Voraus.
Lösung
Die Web-MVC-Annotationsbindung basiert schließlich auf einer
org.springframework.beans.AbstractPropertyAccessor
das zwei konkrete Implementierungen hat:
org.springframework.beans.beanwrapperimpl org.springframework.bean.directfieldAccessor
Beide akzeptieren ein Java-Objekt, das das Ziel ist, für das die Eigenschaften festgelegt werden.
Der erste, BeanWrapperImpl, verwendet die Setter/Getter-Methoden eines Java-Objekts, während der andere die Felder direkt festlegt.Beide prüfen, ob die Methoden/Felder öffentlich/zugänglich sind. Andernfalls verwenden Sie setAccessible(true) von Reflection, um sicherzustellen, dass sie festgelegt werden können.
Vom Web MVC wird eine Instanz von AbstractPropertyAccessor erstellt und die Parameterzuordnung eines HttpRequest wird an AbstractPropertyAccessor#setPropertyValues übergeben.
Nach dem Aufruf wird das Java-Objekt mit dem Inhalt der Karte gefüllt