1. Controller Advice
- 특정 컨트롤러나 전체 컨트롤러에 걸쳐 로직을 중앙화하는데 사용되는 어노테이션입니다.
- 예외 처리, 바인딩 설정, 모델 어트리뷰트 설정 등에 사용됩니다.
- @ExceptionHandler, @InitBinder, @ModelAttribute
적용 범위
- 기본적으로 해당 메서드가 선언된 @Controller 내에서만 적용됩니다.
- @ControllerAdvice나 @RestControllerAdvice 클래스 내에서 선언된 경우, 어느 컨트롤러에서든 적용될 수 있습니다.
빈 등록
@ControllerAdvice
- @ComponentScan 메타-어노테이션되어 있습니다.
- 컴포넌트 스캔을 통해 스프링 빈으로 등록될 수 있습니다.
@RestControllerAdvice
- @ControllerAdvice와 @ResponseBody로 메타-어노테이션되어 있습니다.
- 메서드의 반환 값이 응답 본문의 메시지 변환을 통해 렌더링됩니다.
동작 방식
RequestMappingHandlerMapping과 ExceptionHandlerExceptionResolver
- 컨트롤러 어드바이스 빈을 감지하고 런타임에 적용합니다.
@ExceptionHandler 메서드
- 로컬 메서드가 전역 메서드보다 먼저 적용됩니다.
@ModelAttribute와 @InitBinder 메서드
- 전역 메서드가 로컬 메서드보다 먼저 적용됩니다.
적용 범위 제한
- 적용되는 컨트롤러와 핸들러의 범위를 좁힐 수 있는 속성을 가지고 있습니다.
// Target all Controllers annotated with @RestController
@ControllerAdvice(annotations = RestController.class)
public class ExampleAdvice1 {}
// Target all Controllers within specific packages
@ControllerAdvice("org.example.controllers")
public class ExampleAdvice2 {}
// Target all Controllers assignable to specific classes
@ControllerAdvice(assignableTypes = {ControllerInterface.class, AbstractController.class})
public class ExampleAdvice3 {}
출처
'Spring > Spring MVC' 카테고리의 다른 글
[Spring MVC] 2-3. Handler Methods: DataBinder (1) | 2023.10.17 |
---|---|
[Spring MVC] 2-2. Handler Methods: Type Conversion (0) | 2023.10.17 |
[Spring MVC] 2-1. Handler Methods: Method Arguments (2) | 2023.10.17 |
[Spring MVC] 1-2. DispatcherServlet: Special Bean Types (0) | 2023.10.16 |
[Spring MVC] 1-1. DispatcherServlet: Context Hierarchy (0) | 2023.10.16 |