어댑터 모드는 여기에서 사용됩니다. 컨트롤러 유형이 다르고 여러 구현 방법이 있기 때문에 호출 방법은 결정적이지 않습니다. 컨트롤러 메서드를 직접 호출 해야하는 경우 다음과 같이 코드에 작성해야합니다.
if (mappedhandler.gethandler () Multiacect Controller) {((Multiacectontroller) mappedhandler.gethandler ()). xxx} else if (mappedhandler.gethandler () instancef xxx) {...} else if (...) {...} HardController를 추가하면 if (mappedHandler.gethandler () HardController의 인스턴스)를 추가해야한다고 가정합니다.
이 양식은 프로그램을 유지하기 어렵고 설계 패턴의 개방 및 마감 원리를 확장 및 확장을위한 개방 및 수정 폐쇄를 어렵게 만듭니다.
따라서 스프링은 각 컨트롤러에 해당 어댑터 구현 클래스를 갖도록 어댑터 인터페이스를 정의합니다.
어댑터가 컨트롤러 대신 해당 메소드를 실행하도록하십시오. 이러한 방식으로 컨트롤러를 확장 할 때는 SpringMVC의 확장을 완료하기 위해 어댑터 클래스 만 추가하면됩니다. 정말 영리한 접근법입니다!
말도 안되는 말을하지 않으면 코드를 넣으십시오. 명확하게 보려면 스프링 MVC를 직접 시뮬레이션하는 코드 세트를 구현할 수 있습니다. 스프링 소스 코드를 직접 붙여 넣어 초점을 줄이기 쉽습니다.
// 어댑터 정의 공개 인터페이스 handlerAdapter {public boolean supports (Object Handler); public void handler (Object Handler);} // 다음은 세 가지 유형의 컨트롤러 구현 공개 인터페이스 컨트롤러 {} public void dohttphandler () {system.out.out.out. 클래스 simplecontroller는 컨트롤러를 구현합니다 {public void dosimplerhandler () {system.out.println ( "simple ...");}} public class annotationcontroller empless 컨트롤러 {public void doannotationhandler () {system.out.println ( "Annotation ..."); handlerAdapter {public void handler (객체 핸들러) {((simplecontroller) handler) .dosimplerHandler ();} public boolean support (객체 핸들러) {return (handler instancefof simplecontroller);}} 공개 클래스 httphandleradapter halleradapter {object handler). {((httpcontroller) handler) .dohttphandler ();} public boolean supports (Object Handler) {return (httpcontroller의 핸들러 인스턴스);}} public void hone (public void handle handler) {(annotationcontroller) handler); 부울 지원 (객체 핸들러) {return (return (antotationcontroller의 핸들러 인스턴스);}} // dispatcherservlet import java.util.arraylist; import java.util.list; public static list <handleradapter> handleradapters = new arraylist <handleradapter> (); dispatchservlet () {handlerAdapters.add (new annotationHandlerAdapter ()); handlerAdapters.add (new httphandlerAdapter ()); handlerAdapters.add (new SimpleHandlerAdapter ()); 어떤 종류의 컨트롤러가 구현되는지, 어댑터는 적응 후 항상 원하는 결과를 얻을 수 있습니다. // httpcontroller 컨트롤러 = 새로운 httpcontroller (); // AnnotationController Controller = New AnnotationController (); SimpleController Controller = New SimpleController (); // 해당 어댑터 핸들러 라디 랩터 어댑터 (컨트롤러); // 해당 컨트롤러에 해당 메소드 어댑터 (컨트롤러)를 실행합니다.} public handleradapter gethandler (컨트롤러 컨트롤러) {for (handleradter Adapter) : this.handlerAdapters) {if (adapter.supports (컨트롤러)) {return 어댑터;}} return null;} public static void main (string [] args) {new DispatchServlet (). dodispatch ();}}이 모델을 통해 오픈 소스 코드의 절묘함을 볼 수 있습니다. 프레임 워크 소스 코드를 살펴보면 읽어야 할 목표가 있어야하므로 배워야 할 많은 것들을 찾을 수 있습니다. 현재 소스 코드를 분석하는 많은 게시물이 주로 무엇을, 어떻게, 어떻게 설명합니다.
이것이 관심을 끌는 방법입니다. "왜"에 대해 토론 할 수 있기를 바랍니다
요약
위의 것은이 기사의 SpringMVC 어댑터 모드 코드 예제에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!