Режим адаптера используется здесь. Поскольку типы контроллеров различны, и существует несколько методов реализации, вызовный метод не является детерминированным. Если вам нужно напрямую вызвать метод контроллера, вам нужно написать его в коде следующим образом:
if (mappenhandler.gethandler () exanceof multiactionController) {((MultiActionController) mapedHandler.gethandler ()). xxx} else if (mapedHandler.gethandler () exanceof xxx) {...} else if (...) {...} Предположим, что если мы добавим Hardcontroller, нам нужно добавить линию, если (mappenhandler.gethandler () экземпляр Hardcontroller)
Эта форма делает программу трудной для поддержания и нарушает принцип открытия и закрытия в шаблоне проектирования - открытие для расширений и закрытие для модификаций.
Следовательно, Spring определяет интерфейс адаптера, так что каждый контроллер имеет соответствующий класс реализации адаптера.
Пусть адаптер выполнит соответствующий метод вместо контроллера. Таким образом, при расширении контроллера вам нужно только добавить класс адаптера, чтобы завершить расширение SpringMVC. Это действительно очень умный подход!
Если вы не говорите много чепухи, просто поместите в него код. Чтобы ясно видеть, вы можете реализовать набор кода для имитации SpringMVC самостоятельно. Легко уменьшить ваше внимание, напрямую вставая на исходный код Spring.
// Определите интерфейс адаптерного интерфейса общего интерфейса handlerAdapter {public Boolean поддержки (обработчик объекта); public void -ручка (обработчик объекта);} // Ниже приведены три типа реализации контроллера Public inehtphandler {} public class httpcontroller Imprements Controller {public void dohtphandler () {System.out.print.print. Class SimpleController реализует контроллер {public void dosimplerHandler () {system.out.println ("simple ...");}} public class annotationcontroller реализует контроллер {public void doannotationHandler () {system.out.println ("annotation ..."); {public void handless (обработчик объекта) {((SimpleController). {((Httpcontroller) Handler) .dohttphandler ();} public boolean поддерживает (handler) {return (экземпляр обработчика httpcontroller);}} public class annotationhandlerAdapter реализует HandlerAdapter {public void handler (объект) {((AnnotationController) Handler) .doannotationHandler ();} Public Boolean Supports (Object Handler) {return (экземпляр Handler AnnotationController);}} // Совместное использование диспетчеры Java.util.arraylist; import java.Utl.Utl.Utl.Utl.Utl.UTIL.UTIL. new ArrayList <handlerAdapter> (); Public DispatchServlet () {handlerAdapters.Add (New AnnotationHandlerAdapter ()); HandlerAdapters.Add (новый httphandlerAdapter ()); Из запроса, просто новый, может быть выведен, // независимо от того, какой контроллер реализован, адаптер всегда может получить желаемый результат после адаптации // httpcontroller Controller = new httpcontroller (); // AnnotationController Controller = new AnnotationController (); SimpleController Controller = new SimpleController (); // Получить соответствующий адаптер адаптера адаптера. this.handleradapters) {if (adapter.supports (controller)) {return adapter;}} return null;} public static void main (string [] args) {new DispatchServlet (). Dodispatch ();}}Благодаря этой модели мы видим изысканность открытого исходного кода. Когда мы смотрим на исходный код Framework, у нас должна быть цель прочитать, чтобы мы нашли много вещей, которые нам нужно изучить. В настоящее время многие посты, анализирующие исходный код, в основном объясняют, что, как,
Это как привлечь внимание. Я надеюсь, что вы можете обсудить «почему» вместе
Суммировать
Выше приведено пример кода режима адаптера SpringMVC в этой статье, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!