Skip to content

Latest commit

 

History

History
32 lines (22 loc) · 1.97 KB

Spring MVC - @ControllerAdvice 동작 원리.md

File metadata and controls

32 lines (22 loc) · 1.97 KB

@ControllerAdvice란?

Specialization of @Component for classes that declare @ExceptionHandler, @InitBinder, or @ModelAttribute methods to be shared across multiple @Controller classes.

여러 @Controller 클래스에서 공유할 @ExceptionHandler, @InitBinder 또는 @ModelAttribute 메서드를 선언하는 클래스에 대한 @Component의 특수화입니다. Spring API Docs

여러 @Controller 클래스에서 어떤 로직(주로 예외처리)을 한 곳에서 수행할 수 있다.

@ControllerAdvice 생성/사용 과정

  • 생성
    • @ControllerAdvice가 붙은 빈이 컴포넌트 스캔을 통해 등록 될 떄, ControllerAdviceBean으로 등록된다.
    • ExceptionHandlerExceptionResolver가 필드로 exceptionHandlerAdviceCache를 가진다.
    • ExceptionHandlerExceptionResolver.initExceptionHandlerAdviceCache()에서 생성할 때, List<ControllerAdviceBean>을 가져와 등록한다.
  • 사용
    • ExceptionHandlerExceptionResolverexceptionHandlerCache(Controller에 있는 ExceptionHandler)를 먼저 확인하고 있으면 해당 객체에 예외 해결을 위임한다.
    • 없다면 exceptionHandlerAdviceCache에 등록된 ExceptionHandler을 읽고 처리한다.

@ControllerAdvice는 AOP인가?

@ControllerAdvice의 Advice는 AOP에서 사용되는 용어이다. CGLIB나 Proxy를 사용하지 않지만, 횡단 관심사(예외처리 등)을 분리하고 모듈화 한다는 점에서 AOP라고 볼 수 있다.

AOP는 어떤 구현 방식이라기보다 패러다임이기 때문이다.

관련 메모

References