El modo adaptador se usa aquí. Dado que los tipos de controlador son diferentes y existen múltiples métodos de implementación, el método de llamada no es determinista. Si necesita llamar al método del controlador directamente, debe escribirlo en el código de la siguiente manera:
if (mappedHandler.gethandler () instanceo de multiActionController) {(((MultiActionController) mappedHandler.gethandler ()). xxx} else if (mappedHandler.gethandler () instancia de xxx) {...} else if (...) {...} Suponga que si agregamos un HardController, necesitamos agregar una línea if (MappedHandler.gethandler () instancia de HardController)
Este formulario hace que el programa sea difícil de mantener y viola el principio de apertura y cierre en el patrón de diseño: apertura para extensiones y cierre para modificaciones.
Por lo tanto, Spring define una interfaz adaptadora para que cada controlador tenga una clase de implementación del adaptador correspondiente.
Deje que el adaptador ejecute el método correspondiente en lugar del controlador. De esta manera, al extender el controlador, solo necesita agregar una clase de adaptador para completar la extensión de SpringMVC. ¡Realmente es un enfoque muy inteligente!
Si no dice muchas tonterías, simplemente pon el código en él. Para ver claramente, puede implementar un conjunto de código para simular SpringMVC usted mismo. Es fácil reducir su enfoque pegando directamente el código fuente de resorte.
// Definir una interfaz de adaptador Public Interface HandlerAdapter {public boolean admite (Handler de objetos); public Void Handle (Handler de objetos);} // Los siguientes son tres tipos de implementaciones de controlador Interface Public Interface Controller {} public class httpController implementa el controlador {public void dohttphandler () {System.print.print (""). Class SimpleController implementa el controlador {public void dosimpplerHandler () {System.out.println ("simple ...");}} public class AnnotationController implementa controlador {public void doAnnotationHandler () {System.out.println ("anotación ...");} // lo siguiente es un adapter de adaptermenterments {public void handle (Object Handler) {((SimpleController) Handler) .DosPlerHandler ();} Public Boolean Support (Handler de Object) {return (Handler InstanceOf SimpleController);}} public class httphandlerAdapter implementa HandlerApter {public Chous Handler) {((HttpController) Handler) .DoHttPhandler ();} public boolean admites (Handler de objetos) {return (Handler Instance de HttpController);}} Class pública AnnotationHandlerAdapter Implementa HandlerAdapter {Mango público Void (Handler de objetos) {(((AnnotationController) Handler) .DoAnnotationHandler ();} public boolean admites (Handler de objetos) {return (instancia de controlador de annotationController);}} // Simule un desplazamiento de ventajas servlet importante java.util.arrayList; import java.util.list; public classspationservlet {Public static list <list static static <list static <list static < new ArrayList <HandlerAdapter> (); public DispatchServlet () {HandlerAdapters.Add (new AnnotationHandlerAdapter ()); HandlerAdapters.add (new httphandlerAdapter ()); handlerAdapters.add (new SimpleHandLerAdapter ();} Void Void DodsisPatch () Solicitud, simplemente nueva, se puede emitir, // no importa qué tipo de controlador se implemente, el adaptador siempre puede obtener el resultado deseado después de la adaptación // httpcontroller controlador = new httpController (); // Controlador AnnotationController = new AnnotationController (); SimpleController Controller = new SimpleController (); // Obtenga el adaptador de adaptador correspondiente adaptador = gethandler (controlador); // Ejecute el controlador correspondiente del método correspondiente adaptador de adaptador (controlador);} gethandler (controlador del controlador) {para (adaptador de manejador: adaptador de manejador: this.handlerAdapters) {if (adapter.supports (controlador)) {return adaptador;}} return null;} public static void main (string [] args) {new DispatchServlet (). DodisPatch ();}}A través de este modelo, podemos ver la exquisitez del código de código abierto. Cuando observamos el código fuente del marco, debemos tener un objetivo que leer, para que encontremos muchas cosas que necesitamos aprender. Actualmente, muchas publicaciones que analizan el código fuente explican principalmente qué, cómo,
Así es como atraer la atención. Espero que puedan discutir "por qué" juntos
Resumir
Lo anterior se trata del ejemplo del código de modo de adaptador SpringMVC en este artículo, espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!