O modo adaptador é usado aqui. Como os tipos de controlador são diferentes e existem vários métodos de implementação, o método de chamada não é determinístico. Se você precisar chamar o método do controlador diretamente, precisará escrevê -lo no código da seguinte forma:
if (mapedhandler.gethandler () instância de multilocationcontroller) {((multiactionController) mapedhandler.gethandler ()). xxx} else if (mapedhandler.gethandler () instância xxx) {...} mais se (...) {...} Suponha que, se adicionarmos um controlador harding, precisamos adicionar uma linha se (mapedhandler.gethandler () instância de hardcontroller)
Este formulário dificulta o programa e viola o princípio de abertura e fechamento no padrão de design - abertura para extensões e fechamento para modificações.
Portanto, o Spring define uma interface adaptadora para que cada controlador tenha uma classe de implementação do adaptador correspondente.
Deixe o adaptador executar o método correspondente em vez do controlador. Dessa forma, ao estender o controlador, você só precisa adicionar uma classe adaptadora para concluir a extensão do springmvc. É realmente uma abordagem muito inteligente!
Se você não diz muito bobagem, basta colocar o código nele. Para ver claramente, você pode implementar um conjunto de código para simular o SpringMVC sozinho. É fácil reduzir seu foco, colando diretamente o código -fonte da primavera.
// Defina uma interface do adaptador Handleratapter de interface pública {public boolean supports (manipulador de objetos); public void Handle (manipulador de objetos);} // os seguintes são três tipos de implementações do controlador controlador de interface pública {} public class (systemorn) {systroller public {} httpcontroller implementos {public void dohttpta (). classe SimpleController implementa o controlador {public void DosimplerHandler () {System.out.println ("Simple ...");}} classe public AnoTationController implementa o controlador {public void doannotationHandler () {System.out.println ("annatation ...");} {public void Handle (manipulador de objetos) {((simplecontroller) handler) .dosimplerHandler ();} suporte booleano público (manipulador de objeto) {return (Instância do manipulador do SimpleController);}} classe pública HttpHandLaRadApter implementa HandlerAdApter {Void Holdre (Void (objeto manual) {((Httpcontroller) manipulador) .dohttphandler ();} suportes públicos booleanos (manipulador de objetos) {return (instância do manipulador de httpController);}} classe publicLaTationHandLaHandLaTApter Iplemless HandleRApter {public void manipul Suportes booleanos (manipulador de objetos) {return (instância do manipulador de anotaçãoController);}} // simular um DispatcheserServlet import java.util.arraylist; importar java.util.list; public class ArrayList; DispatchServlet () {Handleratapters.add (novo anoTationHandlerRatapter ()); handleratapters.add (novo httphandleradapter ()); handlerradApters.add (new limpleHandLaHandLapter ()); Que tipo de controlador é implementado, o adaptador sempre pode obter o resultado desejado após a adaptação // httpcontroller controller = new httpController (); // AnoTationController Controller = new AnoTationController (); SimpleController Controller = new SimpleController (); // Obtenha o adaptador de manipulador de adaptador correspondente adaptador = Gethandler (controlador); // Execute o controlador correspondente correspondente do método Adapter.Handle (controlador);} manipulador público Gethandler (controlador) {para (manipulador); this.Handleratapters) {if (adaptador.supports (controlador)) {retorna adaptador;}} retorna null;} public static void main (string [] args) {new DispatchServlet (). Dodispatch ();}}Através deste modelo, podemos ver a requintamento do código -fonte aberto. Quando analisamos o código -fonte da estrutura, precisamos ter uma meta para ler, para encontrar muitas coisas que precisamos aprender. Atualmente, muitas postagens analisando o código -fonte explicam principalmente o que, como,
É assim que atrai atenção. Espero que você possa discutir "por que" juntos
Resumir
O exposto acima é sobre o exemplo do código do modo adaptador Springmvc neste artigo, espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!