Der Adaptermodus wird hier verwendet. Da die Controller -Typen unterschiedlich sind und mehrere Implementierungsmethoden vorliegen, ist die Aufrufmethode nicht deterministisch. Wenn Sie die Controller -Methode direkt aufrufen müssen, müssen Sie sie wie folgt in den Code schreiben:
if (mappedHandler.getHandler () InstanceOf MultiactionController) {((multiactionController) mappedHandler.getHandler ()). xxx} else if (mappedHandler.getHandler () Instanceof xxx) {...} else if () if () {...} {} Angenommen, wir müssen eine Zeile hinzufügen, wenn wir einen Hardcontroller hinzufügen, wenn (mappedHandler.getHandler () Instanz von HardController) hinzufügen müssen.
Dieses Formular erschwert das Programm, das das Eröffnungs- und Schließprinzip im Entwurfsmuster aufrechterhalten und verletzt - Öffnung für Erweiterungen und Schließung für Änderungen.
Daher definiert Spring eine Adapterschnittstelle so, dass jeder Controller eine entsprechende Adapter -Implementierungsklasse hat.
Lassen Sie den Adapter die entsprechende Methode anstelle des Controllers ausführen. Auf diese Weise müssen Sie bei der Erweiterung des Controllers nur eine Adapterklasse hinzufügen, um die Erweiterung von SpringMVC zu vervollständigen. Es ist wirklich ein sehr cleverer Ansatz!
Wenn Sie nicht viel Unsinn sagen, geben Sie einfach den Code hinein. Um klar zu sehen, können Sie eine Reihe von Code implementieren, um SpringMVC selbst zu simulieren. Es ist einfach, Ihren Fokus zu reduzieren, indem Sie den Frühlingsquellcode direkt einfügen.
//Define an Adapter interface public interface HandlerAdapter {public Boolean supports(Object handler);public void handle(Object handler);}//The following are three types of controller implementations public interface Controller {}public class HttpController implements Controller{public void doHttpHandler(){System.out.println("http...");}}public Klasse SimpleController implementiert Controller {public void dosimPlerHandler () {System.out.println ("einfach ...");}} öffentliche Klasse AnnotationController Implements Controller {public void doannotationHandler () {System.outln ("Annotation implements ...")}} // Die folgende Klassenklassen ("Annotation ..."); {public void handle(Object handler) {((SimpleController) handler).doSimplerHandler();}public Boolean support(Object handler) {return (handler instanceof SimpleController);}}public class HttpHandlerAdapter implements HandlerAdapter {public void handle(Object handler) {((HttpController) Handler) .dohttphandler ();} public boolean Supports (Objekthandler) {return (Handlerinstanz httpController);}} öffentliche Klasse AnnotationHandlerAdapter implements HandlerAdapter {public void griff (Objekt Handler) {((AnnotationController) Handler) .doannotationHandler ();} public boolean Supports (Objekthandler) {return (Handlerinstanz von AnnotationController);}} // Simulation eines DispatcherServlet -Imports Java.util.ArrayList; = new ArrayList <HandlerAdapter> (); public sspatchServlet () {HandlerAdapters.Add (neue AnnotationHandlerAdapter (); HandlerAdapters.Add (new httphanderAdapter ()); Handleradapter.Add (New SimpleHandleradapter (); Der Handler von Request, nur neu, kann ausgegeben werden. Unabhängig davon, welche Art von Controller implementiert ist, kann der Adapter immer das gewünschte Ergebnis nach der Anpassung erhalten // httpcontroller Controller = new httpController (); // AnnotationController Controller = new AnnotationController (); SimpleController -Controller = new SimplyController (); // Erhalten Sie den entsprechenden Adapter -Handleradapter adapter = GetHandler (Controller); // Führen Sie den entsprechenden Controller entsprechenden Methodenadapter aus. this.HandlerAdapters) {if (adapter.Supports (Controller)) {return adapter;}} return null;} public static void main (String [] args) {new SentatchServlet (). dodispatch ();}}Durch dieses Modell können wir die Exquiität des Open -Source -Codes sehen. Wenn wir uns den Framework -Quellcode ansehen, müssen wir ein Ziel zum Lesen haben, damit wir eine Menge Dinge finden, die wir lernen müssen. Derzeit erklären viele Beiträge, die den Quellcode analysieren, meist, was, wie, wie,
So erregt man Aufmerksamkeit. Ich hoffe, Sie können "Warum" zusammen diskutieren
Zusammenfassen
In diesem Artikel handelt es sich um das Beispiel für den Frühlingsmodus -Codescode. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!