Le mode adaptateur est utilisé ici. Étant donné que les types de contrôleur sont différents et qu'il existe plusieurs méthodes d'implémentation, la méthode d'appel n'est pas déterministe. Si vous devez appeler directement la méthode du contrôleur, vous devez l'écrire dans le code comme suit:
if (mappedHandler.Gethandler () instanceof MultiActionController) {((MultiActionController) mapedHandler.Gethandler ()). xxx} else if (mapedHandler.Gethandler () instance of xxx) {...} else if (...) {...} Supposons que si nous ajoutons un contrôleur Hardport, nous devons ajouter une ligne si (maptedHandler.Gethandler () instance de HardController)
Ce formulaire rend le programme difficile à maintenir et viole le principe d'ouverture et de clôture dans le modèle de conception - ouverture pour les extensions et la fermeture pour les modifications.
Par conséquent, Spring définit une interface d'adaptateur afin que chaque contrôleur dispose d'une classe d'implémentation adaptateur correspondante.
Laissez l'adaptateur exécuter la méthode correspondante au lieu du contrôleur. De cette façon, lors de l'extension du contrôleur, il vous suffit d'ajouter une classe d'adaptateur pour terminer l'extension de SpringMVC. C'est vraiment une approche très intelligente!
Si vous ne dites pas beaucoup de bêtises, mettez-y simplement le code. Afin de voir clairement, vous pouvez implémenter un ensemble de code pour simuler SpringMVC par vous-même. Il est facile de réduire votre concentration en collant directement le code source de ressort.
// Définir une interface d'adaptateur HandlerAdapter d'interface publique {Supports booléens publics (gestionnaire d'objets); Public void Handle (gestionnaire d'objets);} // Les éléments suivants sont trois types d'implémentations de contrôleur Controcheur d'interface publique {} classe publique httpController implémente le contrôleur {public Void doHttPhandler () {System.out.TrinTln ("HTTP ...") classe SimpleController implémente le contrôleur {public void dosImplerHandler () {System.out.println ("Simple ...");}} public class annotationController implémente le contrôleur {public void doannotationhandler () {System.out.println ("Annotation ...");}} // Handleradapter {public void handle (objet handler) {((SimpleController) Handler) .dosImplerHandler ();} public booléen support (objet Handler) {return (gestionnaire instanceof SimpleCroller);}} public class httphandlerAdapter itre {((HttpController) Handler) .DoHTTPhandler ();} public boolean supports (Handler d'objet) {return (Handler instanceof httpController);}} public class annotationhandleradapter impalted handleradapter {public Void mandeg Boolean Supports (Handler d'objet) {return (instance de gestionnaire d'AnnotationController);}} // simule un Dispatterservlet import java.util.arraylist; import java.util.list; public class dispatchServlet {public static list <HandlerAdapter> handleradapters = new ArrayList <HandlerAdapter> (); public DispatchServlet () {handleradapters.add (new AnnotationHandlerAdapter ()); handleradapters.add (new httphandleradapter ()); handleradapters.add (new SimpleHandlerAdapter ());} public void dodispatch () {// ici, nous simularing printempsmvc Le type de contrôleur est implémenté, l'adaptateur peut toujours obtenir le résultat souhaité après Adaptation // HttpController Controller = new HttpController (); // AnnotationController Controller = new AnnotationController (); SimpleController Controller = new SimpleController (); // Obtenez l'adaptateur HandlerAdapter de l'adaptateur correspondant = Gethandler (contrôleur); // exécuter le contrôleur correspondant adaptateur de méthode correspondante. this.handleradapters) {if (adapter.Supports (contrôleur)) {return adapter;}} return null;} public static void main (String [] args) {new DispatchServlet (). Dodispatch ();}}Grâce à ce modèle, nous pouvons voir l'exquisité du code open source. Lorsque nous examinons le code source du cadre, nous devons avoir un objectif à lire, afin que nous trouverons beaucoup de choses que nous devons apprendre. Actuellement, de nombreux publications analysant le code source expliquent principalement quoi, comment,
C'est comment attirer l'attention. J'espère que vous pourrez discuter de "pourquoi" ensemble
Résumer
Ce qui précède est tout au sujet de l'exemple de code du mode adaptateur SpringMVC Dans cet article, j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!