자주 사용하지만 번번히 헷갈리는 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의 빈들을 생성하는 방식이다.

@EnableWebMvc

웹 어플리케이션에 필요한 DispatcherServlet 같은 것들을 셋팅한다.
spring-webmvc가 클래스패스에 있는 경우 자동으로 추가된다.

@ComponentScan

Bean을 탐색하는 경로를 지정하는 어노테이션이다. @EnableAutoConfiguration와 함께 사용된다.
지정된 패키지의 서브패키지들을 탐색한다. 때문에 루트 패키지에 붙이는 것이 일반적이다.

+ Recent posts