ここではアダプターモードが使用されています。コントローラーのタイプは異なり、複数の実装方法があるため、呼び出し方法は決定論的ではありません。コントローラーメソッドを直接呼び出す必要がある場合は、次のようにコードに記述する必要があります。
if(mappedhandler.gethandler()instanceof multiactioncontroller){((((((((((((((((((()mappedhandler)))))」else(xxx){...} ells if(...){...){...} {...} HardControllerを追加する場合、if(mappedhandler.gethandler()instanceof hardcontroller)を追加する必要があると仮定します。
このフォームにより、プログラムは維持を困難にし、デザインパターンの開閉原則 - 拡張の開口部と修正の閉鎖を侵害します。
したがって、Springは、各コントローラーに対応するアダプター実装クラスを持つようにアダプターインターフェイスを定義します。
コントローラーの代わりに、アダプターが対応するメソッドを実行させます。このようにして、コントローラーを拡張するときは、SpringMVCの拡張を完了するためにアダプタークラスを追加するだけです。それは本当にとても賢いアプローチです!
ナンセンスがあまり言わない場合は、コードを入れてください。明確に見るために、一連のコードを実装してSpringMVCを自分でシミュレートできます。 Springソースコードを直接貼り付けることで、焦点を減らすのは簡単です。
//アダプターインターフェイスの定義パブリックインターフェイスハンドラダプター{public boolean supports(object handler); public void handle(object handler);} //次のタイプのコントローラーの実装{}パブリッククラスのパブリッククラスの実装{}パブリッククラスhttpcontrollerはコントローラー{public void dohtphandler(){public void dohtphand(クラスSimpleControllerはコントローラーを実装しています{public void dosimplerhandler(){system.out.println( "simple ...");}} public class annotationcontrollerはコントローラー{public void doannotationhandler(){system.out.println( "annotation ...");} {public void handle(object handler){(((simplecontroller)handler).dosimplerhandler();} public boolean support(object handler){return(handler instance of simplecontroller);}} public class httphandleradapterはハンドラーアダプター{public void hander(object hander)を実装しています。 {(((httpcontroller)handler).dohttphandler();} public boolean supports(object handler){return(HttpController) {((AnnotationController)Handler).DoannotationHandler();} public boolean supports(object Handler){return(annotationControllerのハンドラーインスタンス);}} // DispatcherServlet Import Java.util.ArrayList; Import Java.util.util.list; Public Class distrapterticticter HandlerAdapters = new ArrayList <HandlerAdapter>(); public dispatchServlet(){handleradapters.add(new AnnotationHandleradapter()); handleradapters.add(new httphandleradapter()); handleradapters.add(new simplehandleradapter(); public void(); springmvcのオブジェクトは、リクエストからハンドラーを採取するためのオブジェクトです。ただ、出力を使用できます。 // annotationController controller = new AnnotationController(); SimpleController Controller = new SimpleController(); //対応するアダプターハンドラーダプターAdapter = Gethandler(Controller); //対応するコントローラー対応メソッドAdapter.Handle(Controller);} Public HandlerAdapter Gethandler(Controller Controller){(HandlerAdapter Adapter: this.handleradapters){if(adapter.supports(controller)){return adapter;}} return null;} public static void main(string [] args){new dispatchServlet()。dodispatch(}}}}このモデルを通して、オープンソースコードの絶妙さを確認できます。フレームワークソースコードを見るときは、読む必要があることを読む必要がある必要があります。現在、ソースコードを分析する多くの投稿が主に何を、どのように説明していますか
これが注意を引く方法です。 「なぜ」を一緒に話し合うことができることを願っています
要約します
上記は、この記事のSpringMVCアダプターモードコードの例に関するすべてです。すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!