작성
·
435
·
수정됨
1
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예
[질문 내용]
강의를 통해 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 ExceptionHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 가 있는 것을 배웠는데요,
그러면 수업 내용중 WebConfig 를 통해 등록한 아래 resolver 들까지 포함하면, 우선순위 높은 순으로 나열할 때 아래 순서가 되는 게 맞나요?
1) ExceptionHandlerExceptionResolver
2) ResponseStatusExceptionResolver
3) DefaultHandlerExceptionResolver
4) MyHandlerExceptionResolver
5) UserHandlerExceptionResolver
@Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
resolvers.add(new MyHandlerExceptionResolver());
resolvers.add(new UserHandlerExceptionResolver());
}
답변 1
1
안녕하세요. 980513k님
사용자 정의 resolver가 기본 resolver보다 우선순위가 높다면, 스프링의 기본 예외 처리 메커니즘을 의도치 않게 덮어쓸 수 있습니다. 예를 들어 @ExceptionHandler
와 같은 편리한 기능이 동작하지 않게 될 위험이 있습니다.
추가로 extendHandlerExceptionResolvers 메서드 이름에서도 알 수 있듯이, 이 메서드는 기존 resolver를 "확장"하기 위한 것입니다.
확장은 일반적으로 기존 기능을 유지하면서 추가 기능을 제공하는 개념입니다.
만약 사용자 정의 resolver를 최우선으로 적용하고 싶다면, configureHandlerExceptionResolvers 메서드를 오버라이드하여 resolver 목록을 완전히 새로 구성할 수 있습니다. 하지만 이 방식은 스프링의 기본 예외 처리 메커니즘을 모두 제거하므로 주의해서 사용해야 합니다.
감사합니다.
기본적으로 스프링은 자세한 것에 우선순위가 높은데, 사용자가 정의한 exceptionresolver가 기본 exceptionresolver들보다 우선순위가 낮은 이유는 무엇인가요?