자주 사용하지만 번번히 헷갈리는 Spring의 주요 어노테이션들을 정리해보고자 한다.
@SpringBootApplication
@SpringBootApplication은 다음 4개의 어노테이션을 포함한다.
@Configuration
어플리케이션 컨텍스트의 빈이 정의된 클래스임을 가리킨다.
@Configuration
public class MyConfig {
@Bean
public MyBean getMyBean() {
...
}
}
@EnableAutoConfiguration
@Configuration이랑 헷갈릴 수 있으나 다른 개념이다.
클래스패스와 내가 정의한 빈에 기반해서 필요할 것 같은 나머지 빈들을 알아서(지능적으로) 추측해서 생성해주는 역할이라고 한다.
예를들어 tomcat-embedded.jar이 클래스패스에 있는 경우 TomcatServletWebServerFactory 빈을 추가로 등록해준다.
스프링부트의 핵심 기능이라고 볼 수 있다.
예를 들어 Thymeleaf 관련해서 AutoCongifuration이 어떻게 동작하는 지 보면
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(ThymeleafProperties.class)
@ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class })
@AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
public class ThymeleafAutoConfiguration {
// ...
}
TemplateMode.class, SpringTemplateEngine.class 요 두가지 클래스가 클래스패스에 있는 경우 ThymeleafAutoConfiguration의 빈들을 생성하는 방식이다.
- 자세히 정리된 자료 : https://www.slideshare.net/sbcoba/2016-deep-dive-into-spring-boot-autoconfiguration-61584342)
@EnableWebMvc
웹 어플리케이션에 필요한 DispatcherServlet 같은 것들을 셋팅한다.
spring-webmvc가 클래스패스에 있는 경우 자동으로 추가된다.
@ComponentScan
Bean을 탐색하는 경로를 지정하는 어노테이션이다. @EnableAutoConfiguration와 함께 사용된다.
지정된 패키지의 서브패키지들을 탐색한다. 때문에 루트 패키지에 붙이는 것이 일반적이다.