du.study기록공간

[Spring MVC] @EnableWebMvc 활용하기 본문

스프링

[Spring MVC] @EnableWebMvc 활용하기

du.study 2019. 11. 8. 23:04
728x90

이번에는 @EnableWebMvc에 대해서 기록해 놓으려고 합니다.

 

@EnableWebMvc를 살펴보면 다음과 같이 선언이 되어있습니다.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {
}

@Import(DelegatingWebMvcConfiguration.class)해당 부분을 Import하게 되는데 해당 클레스와 그 속에서 상속하는 WebMvcConfigurationSupport를 보면 MVC에서 필요한 기본적인 세팅을 해주거나, 웹 관련 설정을 커스터마이징 할 수 있도록 기능을 제공하고 있습니다. 

 

 

@EnableWebMvc의 부분으로 이부분이 될 것 같습니다.

	private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();


	@Autowired(required = false)
	public void setConfigurers(List<WebMvcConfigurer> configurers) {
		if (!CollectionUtils.isEmpty(configurers)) {
			this.configurers.addWebMvcConfigurers(configurers);
		}
	}

WebMvcConfigurer 타입의 빈들을 전부 WebMvcConfigurerComposite에 주입하고 있습니다. 그리고. WebMvcConfigurationSupport에서는 각 빈을 생성하면서 DelegatingWebMvcConfiguration의 함수를 호출하게 되는데 이 과정에서, 결국 WebMvcConfigurerComposite를 바라보며, WebMvcConfigurer 의 구현체를 보게 됩니다.

 

따라서 DelegatingWebMvcConfiguration는 WebMvcConfigurer 를 implement한 빈들을 통해서 커스터마이징 할 수 있게 도아주는 클레스로 볼 수 있으며, DelegatingWebMvcConfiguration 에서 protected로 지원해는 함수의 설명을 보면 커스터마이징 할 수 있는 리스트를 확인할 수 있습니다.

 

현재 프로젝트를 진행하면서 addInterceptors, configureViewResolvers현재 프로젝트를 진행하면서 addInterceptors, configureViewResolvers를 사용중인데 이번 기회에 하나씩 써보면서 포스팅을 해보려합니다. 우선 @EnableWebMvc정리는 이 정도가 될 것 같습니다.

 

 

 

 

어펜딕스 같은 자료로... 만약 @EnableWebMvc를 사용하지 않으면 

 

@EnableWebMvc 사용전

 

해당 이미와 같이 우선순위가 설정되며, @EnableWebMvc를 사용하게 되면 기본적으로

다음과 같이 handlerMapping, handlerAdapters 의 우선순위가 변경되고, 저 안의 기본적인 인터셉터가 추가되는 등의 액션이 있습니다.

 

728x90
Comments