Mode adaptor digunakan di sini. Karena tipe pengontrol berbeda dan ada beberapa metode implementasi, metode panggilan tidak deterministik. Jika Anda perlu memanggil metode pengontrol secara langsung, Anda perlu menulisnya dalam kode sebagai berikut:
if (mappedHandler.getHandler () instanceof multiactionController) {((multiactionController) mappedHandler.getHandler ()). xxx} lain jika (mappedHandler.getHandler () instance dari xxx) {...} lain jika (...) {...} Asumsikan bahwa jika kita menambahkan hardcontroller, kita perlu menambahkan baris jika (mappedHandler.getHandler () instance dari hardcontroller)
Bentuk ini membuat program sulit untuk mempertahankan dan melanggar prinsip pembukaan dan penutupan dalam pola desain - pembukaan untuk ekstensi dan penutupan untuk modifikasi.
Oleh karena itu, Spring mendefinisikan antarmuka adaptor sehingga setiap pengontrol memiliki kelas implementasi adaptor yang sesuai.
Biarkan adaptor menjalankan metode yang sesuai alih -alih pengontrol. Dengan cara ini, saat memperpanjang controller, Anda hanya perlu menambahkan kelas adaptor untuk menyelesaikan ekstensi SpringMVC. Ini benar -benar pendekatan yang sangat pintar!
Jika Anda tidak mengatakan banyak omong kosong, masukkan saja kode di dalamnya. Untuk melihat dengan jelas, Anda dapat mengimplementasikan satu set kode untuk mensimulasikan SpringMVC sendiri. Mudah untuk mengurangi fokus Anda dengan langsung menempelkan kode sumber pegas.
// Tentukan antarmuka antarmuka adaptor HandlerAdapter {public boolean dukungan (objek handler); pegangan public void (pawang objek);} // Berikut ini adalah tiga jenis pengontrol pengontrol antarmuka publik {} public httpController mengimplementasikan controller {public void doHtphandler () {) {) {() {) {{) {{) {{) {public. kelas SimpleController mengimplementasikan pengontrol {public void dosimplerHandler () {System.out.println ("Simple ...");}} kelas publik AnnotationController mengimplementasikan controller {public void doannotationHandler () {System.println ("Annotation ...");}} {System.out.println ("Annotation ...");}} {System.out.println ("Annotation ...");}} {System.out.println ("Annotation ...");} {) {System.println ("Annotation ...");} {) {Systems.println ("Annotation ...");} {handler public void (pawang objek) {((SimpleController) Handler) .DoSImplerHandler ();} Dukungan Boolean Publik (Penangan Objek) {return (Handler Instance dari Simplecontroller);}} Public Class Public HttPhandlerApter HandlerArdapter {public void handle handller (objek handler) Handlerlapter {public void handle handle public handler) handlerlapter {public void handle public {((HttpController) handler) .dohttphandler ();} public boolean mendukung (pawang objek) {return (instance handler dari httpController);}} public class annotationHandlapter handlerapter {public handle public (objek handler) {(objek handler) {(nonnotation nonnotation. Boolean Supports (Object Handler) {return (contoh pawang annotationController);}} // Simulasi DispatcherServlet impor java.util.arraylist; import java.util.list; public class DispatchServlet {public static Daftar <handlerAdapter> handleradapters = public arraylning DISPATCHSERVLET () {HandlerAdapters.Add (AnnotationHandlapter baru ()); HandlerAdapters.Add (baru httphandlerapter ()); handlerAdapters.add (new SimpleHandlapter ());} public void dodispatch () {// Di sini kami mensimulasikan spring ();} public void dodispatch () {// Di sini kami mensimulasikan spring (); Peduli jenis pengontrol apa yang diimplementasikan, adaptor selalu bisa mendapatkan hasil yang diinginkan setelah adaptasi // httpController controller = httpController baru (); // annotationController controller = new annotationController (); SimpleController controller = new SimpleController();//Get the corresponding adapter HandlerAdapter adapter = getHandler(controller);//Execute the corresponding controller corresponding method adapter.handle(controller);}public HandlerAdapter getHandler(Controller controller){for (HandlerAdapter adapter: this.handlerAdapters) {if (adapter.supports (controller)) {return adapter;}} return null;} public static void main (string [] args) {new DispatchServer (). dodispatch ();}}Melalui model ini, kita dapat melihat keindahan kode sumber terbuka. Ketika kita melihat kode sumber kerangka kerja, kita perlu memiliki tujuan untuk dibaca, sehingga kita akan menemukan banyak hal yang perlu kita pelajari. Saat ini, banyak posting yang menganalisis kode sumber kebanyakan menjelaskan apa, bagaimana, bagaimana, bagaimana
Inilah cara menarik perhatian. Saya harap Anda bisa mendiskusikan "mengapa" bersama
Meringkaskan
Di atas adalah semua tentang contoh kode mode adaptor springmvc dalam artikel ini, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!