Spring 응용 어댑터 디자인 모델

어댑터 모드 (Adapter Pattern) 는 인 터 페 이 스 를 원 하 는 다른 인터페이스 로 변환 하여 인터페이스 가 호 환 되 지 않 는 클래스 를 함께 작업 할 수 있 도록 합 니 다. 별명 은 포장 기 (Wrapper) 입 니 다.
Spring AOP 의 어댑터 모드
Spring AOP 의 구현 은 프 록 시 모드 에 기반 한 것 이지 만 Spring AOP 의 증강 및 알림 (Advice) 은 어댑터 모드 에 사 용 됐 으 며 이와 관련 된 인 터 페 이 스 는 AdvisorAdapter 이다.
Advice 에서 자주 사용 하 는 유형 은 다음 과 같 습 니 다.
  • BeforeAdvice (목표 방법 호출 전, 사전 알림)
  • AfterAdvice (목표 방법 호출 후, 사후 알림)
  • AfterReturningAdvice (목표 방법 집행 이 끝 난 후 return 전) 등.

  • 모든 종류의 Advice (알림) 에는 해당 하 는 차단기 가 있 습 니 다.
  • MethodBeforeAdviceInterceptor
  • AfterReturningAdviceAdapter
  • AfterReturningAdviceInterceptor

  • Spring 에서 미리 정 의 된 알림 은 대응 하 는 어댑터 를 통 해 어댑터 MethodInterceptor 인터페이스 (방법 차단기) 유형의 대상 (예 를 들 어 MethodBeforeAdviceInterceptor 이 어댑터 MethodBeforeAdvice 를 책임 져 야 합 니 다.
    Spring MVC 의 어댑터 모드
    Spring MVC 에 서 는 DispatcherServlet 요청 정보 호출 HandlerMapping 에 따라 요청 을 대응 하 는 Handler (즉, 일반적으로 말 하 는 Controller 컨트롤 러 로 분석 한 후 HandlerAdapter 어댑터 로 처리 하기 시작 했다.HandlerAdapter 기대 인터페이스 로 서 구체 적 인 어댑터 실현 류 는 목표 류 에 적합 하고 Controller 는 적합 한 유형 으로 한다.
    왜 Spring MVC 에서 어댑터 모드 를 사용 합 니까?
    Spring MVC 의 Controller 종 류 는 매우 많 고 유형 별 Controller 은 서로 다른 방법 으로 요청 을 처리한다.어댑터 디자인 모델 을 이용 하지 않 고 DispatcherServlet 해당 유형 Controller 을 직접 가 져 오 게 하려 면 아래 코드 와 같이 자체 적 으로 판단 해 야 합 니 다.
    if(mappedHandler.getHandler() instanceof MultiActionController){  
       ((MultiActionController)mappedHandler.getHandler()).xxx  
    }else if(mappedHandler.getHandler() instanceof XXX){  
        ...  
    }else if(...){  
       ...  
    }  
    

    만약 에 Controller 유형 을 하나 더 추가 하면 상기 코드 에 판단 문 구 를 한 줄 더 추가 해 야 한다. 이런 형식 으로 인해 프로그램 을 유지 하기 어렵 고 디자인 모델 의 개폐 원칙 - 확장 개방, 수정 에 대해 닫 힌 다.

    좋은 웹페이지 즐겨찾기