자바 전역 이상 프로세서 구현 프로 세 스 분석

머리말
최근 에 조금 한가 해서 반년 동안 업데이트 되 지 않 았 던 오픈 소스 프로젝트 를 다시 주 웠 다.
새로운 관심 을 가 진 친구 들 은 이 프로젝트 가 무엇 을 하 는 지 아직 모 를 것 이다.일단 공식 소개 부터 볼 게 요.😀)
cicada:Netty 4 를 바탕 으로 하 는 빠 르 고 경량급 WEB 프레임 워 크;지나치게 의존 하지 않 고 핵심 jar 가방 은 30KB 에 불과 합 니 다.

효과.
광고 가 끝나 고 본론 으로 돌아간다.여러분 이 평소에 가장 자주 사용 하 는 MVC 프레임 워 크 는 바로 SpringMVC 입 니 다.비 계 를 구축 할 때 전체적인 이상 처리 가 필수 적 이 라 고 믿 습 니 다.
Spring 용법
보통 우리 의 방법 은 다음 과 같다.
전통 적 인 봄 버 전:
Spring 자체 테이프 의 인 터 페 이 스 를 실현 하고 그 방법 을 다시 쓰 면 마지막 이상 처리 가 바로 여기에 있 습 니 다.이 종 류 를 Spring 의 xml 에 설정 하여 bean 으로 Spring 용기 에 등록 합 니 다.

public class CustomExceptionResolver implements HandlerExceptionResolver {

  @Override
  public ModelAndView resolveException(HttpServletRequest request,
      HttpServletResponse response, Object handler, Exception ex) {
  //     
}

<bean class="ssm.exception.CustomExceptionResolver"></bean>
물론 현재 유행 하 는 SpringBoot 에 도 해당 하 는 간략화 버 전이 있다.

@ControllerAdvice
public class GlobalExceptionHandler {
  @ExceptionHandler(value = Exception.class)
  public Object defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
    //     
  }
}
모두 주해 형식 으로 바 뀌 었 지만 본질 적 으로 는 마찬가지다.
모두 용기 에 특수 한 bean 을 만 들 려 고 합 니 다.이 bean 은 이상 을 처리 하 는 데 사 용 됩 니 다.시스템 이 실 행 될 때 이상 이 생기 면 용기 에서 이 bean 을 찾 아 그 방법 을 실행 하면 됩 니 다.
이 특수 한 bean 을 어떻게 표시 하 는 지 는 특정한 인 터 페 이 스 를 실현 하거나 주해 로 성명 하 는 것 이 아니 라 전통 적 인 Spring 과 SpringBoot 의 용법 에 대응 합 니 다.
cicada 용법
cicada 는 자신의 전역 이상 프로 세 서 를 설계 할 때 도 Spring 의 관련 디자인 을 참 고 했 기 때문에 최종 용법 은 다음 과 같다.

@CicadaBean
public class ExceptionHandle implements GlobalHandelException {
  private final static Logger LOGGER = LoggerBuilder.getLogger(ExceptionHandle.class);

  @Override
  public void resolveException(CicadaContext context, Exception e) {
    LOGGER.error("Exception", e);
    WorkRes workRes = new WorkRes();
    workRes.setCode("500");
    workRes.setMessage(e.getClass().getName() + "        ");
    context.json(workRes);
  }
}
GlobalHandelException 인 터 페 이 스 를 실현 하 는 클래스 를 사용자 정의 합 니 다.요청 에 이상 이 있 을 때 페이지 와 배경 은 다음 과 같이 출력 됩 니 다.


설계 하 다.
사용 방법 이 Spring 과 매우 유사 하 다 는 것 을 알 수 있 고 인터페이스 Global Handel Exception 을 실현 하 는 동시에@Cicada Bean 주 해 를 사용 하여 이 종 류 를 cicada 에 내 장 된 IOC 용기 에 불 러 옵 니 다.
이상 이 발생 하면 이 IOC 용기 에서 이 대상 을 찾 아 resolve Exception 을 호출 하면 됩 니 다.
그 중에서 도 CicadaContext 전역 상하 문 을 통 해 서로 다른 출력(json/text/html)에 응답 할 수 있다.
핵심 원리

다음 절차 도 를 간단하게 그 렸 습 니 다.절 차 는 다음 과 같 습 니 다.
초기 화 할 때 GlobalHandel Exception 인 터 페 이 스 를 구현 한 클래스 를 찾 아 IOC 용기 에 실례 화하 여 등록 합 니 다.이상 이 발생 했 을 때 용기 에서 이상 프로세서 의 대상 을 가 져 와 처리 함 수 를 실행 하면 됩 니 다.
한참 동안 원 리 를 말 해서 소스 코드 가 어떻게 실현 되 었 는 지 보 았 다.

bean 을 초기 화 할 때 이상 프로세서 라면 그 를 따로 저장 합 니 다.
그 중의 Global Handel Exception 자체 의 정의 도 매우 간단 하 다.

다음은 실행 중:



이상 이 발생 하면 이전에 저 장 된 이상 처리 bean 을 통 해 이상 처 리 를 하고 호출 과 동시에 전역 상하 문과 이상 정 보 를 전달 하면 모두 활성 화 됩 니 다.
이렇게 하면 이 실현 류 에서 우리 자신의 이상 처리 논 리 를 실현 할 수 있다.
총결산
만약 오늘 뒤에 시험관 이 당신들 에 게 SpringMVC 의 이상 처 리 는 어떻게 이 루어 졌 느 냐 고 묻는다 면?어떻게 대답 하 는 지 알 겠 지?😏。
또한,한 개의 컨트롤 러 에 대한 이상 처 리 를 설정 할 수 있 는 지 를 발산 할 수 있 습 니 다.모든 컨트롤 러 에 발생 하 는 이상 은 따로 처리 할 수 있 습 니 다.설정 이 없 으 면 전체 이상 에 들 어 갈 수 있 습 니 다.원리 도 많 지 않 아 관심 있 는 친구 가 PR 을 들 어 이 피 처 를 완성 할 수 있다.
프로젝트 원본:
cicada
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기