Frage

Ich baue eine Anwendung mit Spring MVC. Ich möchte für jeden Controller in der Anwendung bestimmte Änderungen an meinem Modell vornehmen. Insbesondere möchte ich bestimmte zusätzliche Daten in das Modell einfügen, die für alle Seiten der Anwendung vorhanden sind.

Ich könnte dies verschiedene Arten tun: Fügen Sie einfach die Daten am Ende eines jeden Controllers hinzu, verwenden Sie eine Unterklasse des Modells, die meine zusätzlichen Daten hinzufügt, und verwenden Es ... ich bin sicher, es gibt andere Optionen.

Aber ich habe eine "Eleganz" -Einbeschränkung: Ich möchte nicht in jedem Controller Code schreiben, ich möchte, dass dieses Verhalten in definiert wird der eine und einzige Platz. Im Idealfall würde es von meiner IOC -Bean -Konfigurationsdatei gesteuert.

Hat jemand eine Empfehlung, wie er dies elegant erreichen kann?

War es hilfreich?

Lösung

Aspekte sind ein guter Ansatz, aber Spring MVC macht es noch einfacher - Sie können a definieren Handlerinterzeptor Das wird vor oder nach jedem Antrag behandelt, wenn eine Anfrage bearbeitet wird. In der Handlerinterceptor -Post -Handle -Methode (in Ihrer Klasse, die die Handlerinterceptor -Schnittstelle implementiert) können Sie Ihre Daten zur ModellAndView hinzufügen. Sie definieren, welche Handler in Ihrer Konfigurationsdatei abgefangen werden sollten.

Andere Tipps

Sie können einen Blick darauf werfen, Aspekte zu verwenden. Frühling hat sogar eine AOP Erweiterung, die Sie verwenden könnten.

Kurz gesagt, ein Aspekt ermöglicht es Ihnen, Code zu definieren, wenn Sie dann entweder wenn Sie die Klassen kompilieren oder wenn sie vom Klassenloader geladen werden. Es ist relativ fortgeschritten und ist nicht das intuitivste für neue Programmierer, aber es soll genau das Problem lösen, auf das Sie sich beziehen.

Ich mag mich irren, aber ich vermute, dass Sie Ihre Anforderungen möglicherweise falsch beschrieben haben.

Sie scheinen zu sagen: "Ich möchte, dass bestimmte Daten für alle Controller zu meinem Modell hinzugefügt werden."

Ich vermute, dass Sie meinen "Ich möchte, dass bestimmte Daten für alle Ansichten verfügbar sind".

Wenn mein Verdacht korrekt ist, verschmutzt das Hinzufügen der Daten zu Ihrem Modell Ihr Modell und verletzt das Prinzip der einzelnen Verantwortung. Dies gilt insbesondere dann, wenn dieselben Daten zu mehreren Modellen hinzugefügt werden sollen. Achten Sie darauf, dass Sie nicht nur Ihr Modell als bequemer "Träger" der Daten verwenden - wobei die Daten nichts mit dem Modell zu tun haben.

Zugegeben, ich bin mit der Frühlings -MVC -Art, Dinge zu tun, nicht vollständig vertraut, aber ein detaillierteres Beispiel dafür, was Sie erreichen möchten, kann eine fundiertere Diskussion ermöglichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top