ServletWebServerFactoryAutoConfiguration은 톰캣 관련 자동설정.
WebMvcAutoConfiguration은 스프링 웹 MVC 자동설정.
스프링부트 애플리케이션 타입 3가지
Servlet(Web), WebFlux(Web), Non web
@ConditionalOnClass({ ... })
@ConditionalOnClass에 설정된 클래스가 클래스패스에 있는 경우 사용하라는 의미.
@ConditionalOnMissingBean({ ... })
@ConditionalOnMissingBean에 설정된 클래스 타입의 빈이 없는 경우 사용하라는 의미.
예를 들어,
WebMvcAutoConfiguration에는 @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})이
설정되어 있는데, WebMvcConfigurationSupport에 해당하는 빈이 없어야만 사용한다는 의미이다.
@EnableWebMvc가 임포트하는 DelegatingWebMvcConfiguration이 WebMvcConfigurationSupport를 상속받고 있다.
@EnableWebMvc는 스프링부트를 사용하지 않을 때 사용한다.
현재 프로젝트는 스프링부트를 사용하므로 이 빈이 없을 때에 사용한다는 의미이다.
만약 스프링부트에서 제공하는 웹 MVC 설정을 사용하지 않고 스프링 웹 MVC를 설정하고자 할 경우,
@EnableWebMvc를 붙이면..
@EnableWebMvc가 임포트하는 DelegatingWebMvcConfiguration이
WebMvcConfigurationSupport를 상속받고 있기 때문에
WebMvcConfigurationSupport 타입이 빈으로 등록이 되고,
스프링부트의 웹 MVC 설정인 WebMvcAutoConfiguration의
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class}) 설정에 위배되기 때문에
스프링부트에서 제공하는 스프링 웹 MVC 설정을 사용하지 않게 된다.
ResourceProperties
CLASSPATH_RESOURCE_LOCATIONS에 리소스 관련 경로가 들어있다.
'@ConfigurationProperties(prefix = "spring.resources" ...'이라고 되어있는 부분은
application.properties에서 prefix로 앞에 'spring.resources'가 붙은 속성을 들고 온다는 의미.
ThymeleafAutoConfiguration
스프링부트 spring.factories에 포함되어 있는 타임리프 기본 설정.
타임리프에서 제공하는 뷰리졸버인 thymeleafViewResolver가 빈으로 등록되어 있는 것을 확인할 수 있다.
ThymeleafProperties 프로퍼티즈를 사용하며,
@ConfigurationProperties(prefix = "spring.thymeleaf")로
프로퍼티즈 파일에서 prefix로 앞에 'spring.thymeleaf'가 붙은 속성을 불러와서 사용하는 것을 알 수 있다.
application.properties 파일에서 'spring.thymeleaf'를 치고 자동완성 목록을 보면
아래처럼 prefix와 suffix에 기본값이 설정되어 있는 것을 확인할 수 있다.