(SERVLET) 스프링 부트의 스프링 MVC 설정
handlerMapping에 은 5가지 mapping이 존재한다.
(simpleUrlHandler는 resources 하위의 정적 리소스 처리의 매핑에 이용된다.)
우선순위는 기본값이며 위와 같이 4개의 어댑터가 존재한다.
ContentNegotiatingViewResolver는 하위의 네 가지 viewResolver를 사용한다. (delegation)
이때 스프링 부트는 이러한 설정들은 어디서 가져오는가?
spring.factories 내부에는 EnableAutoConfuration의 KEY 값으로 여러 configuration 파일들이 저장되어있다. (이것이 바로 컨벤션)
https://jwdeveloper.tistory.com/108
WebMvcAutoConfiguration
WebMvcConfigurationSupport 내부를 살펴보면
해당 클래스를 서브클래스중 이전에 살펴보았던 DelegatingWebMvcConfiguration(@EnableWebMvc가 import 하는 설정 파일)이 있다.
따라서 @ConditionalOnMissingBean이기 때문에 해당 설정이 없는 경우에만 사용한다는 의미로 해석될 수 있다.
스프링 MVC 커스터마이징 (스프링 부트가 지원하는 해당 설정 파일을 사용하고 싶지 않을 때)
-
application.properties
WebMvcAutoConfiguration 내부의 properties들은 각각의 prefix를 가지고 있다.
그 말은 즉 application.properties 설정으로 구현하는 것이 가장 손을 덜 가는 방법이라고 할 수 있다는 점을 시사한다.
formatters의 경우에는
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
}
}
스프링 부트를 사용할 때는 위와 같이 복잡한 과정으로 등록하거나 커스터마이징 할 필요가 없다.
왜냐면
bean으로 등록해서 사용할 수 있게 설정되어있기 때문이다.
-
@Configuration + Implements WebMvcConfigurer: 스프링 부트의 스프링 MVC 자동 설정 + 추가 설정
-
@Configuration + @EnableWebMvc + Imlements WebMvcConfigurer: 스프링 부트의 스프링 MVC 자동 설정 사용하지 않음.