Spring/Spring MVC

(SERVLET) 스프링 부트의 스프링 MVC 설정

주누 2020. 2. 2. 22:43

handlerMapping에 은 5가지 mapping이 존재한다.

(simpleUrlHandler는 resources 하위의 정적 리소스 처리의 매핑에 이용된다.)

우선순위는 기본값이며 위와 같이 4개의 어댑터가 존재한다.

 

ContentNegotiatingViewResolver는 하위의 네 가지 viewResolver를 사용한다. (delegation)


이때 스프링 부트는 이러한 설정들은 어디서 가져오는가?

 

spring-boot-autoconfigure > META-INF > spring.factories

spring.factories 내부에는 EnableAutoConfuration의 KEY 값으로 여러 configuration 파일들이 저장되어있다.  (이것이 바로 컨벤션)

https://jwdeveloper.tistory.com/108

 

(SpringBoot) SpringBoot 자동설정

@EnableAutoConfiguration @SpringBootApplication public class SpringbootgettingstartedApplication { public static void main(String[] args) { SpringApplication.run(SpringbootgettingstartedApplication..

jwdeveloper.tistory.com


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 자동 설정 사용하지 않음.