본문 바로가기
학습/Spring

[spring] 스프링부트의 Bean 등록 2단계

by KKambi 2020. 3. 28.

@SpringBootApplication

  • 메인 어플리케이션 클래스에 선언되는 어노테이션
  • @SpringBootConfiguration + @ComponentScan + @EnableAutoConfiguration

 

스프링부트 어플리케이션은 빈 등록을 2번 수행

  1. @ComponentScan으로 등록하는 1단계
  2. @EnableAutoConfiguration으로 추가적인 빈을 등록하는 2단계

 

1단계 @ComponentScan

  • @Component 어노테이션을 가진 클래스를 스캔해서 빈으로 등록
  • 이 어노테이션이 선언된 위치부터, 모든 하위 패키지를 스캔
  • Ex) @Configuration / @Controller / @Service / @Repository / @RestController

 

2단계 @EnableAutoConfiguration

  • 스프링부트의 수많은 기본 의존성들을 설정해줌
  • gradle을 통해 import한 spring-boot-autoconfigure의 META-INF에 들어있는 spring.factories 파일
    => org.springframework.boot.autoconfigure.EnableAutoConfiguration란 key는 수많은 configuration파일들을 value로 가지고 있다.
    => Ex) WebMvcAutoConfiguraiton Class = @Configuration = Bean을 등록하는 자바 설정 파일
  • key에 선언된 value값들을 보고 수많은 클래스를 빈으로 등록함 (= AutoConfiguration의 대상)

 

주의할 점

  • @EnableAutoConfiguraiton이 모든 클래스를 등록하는 건 아님
  • @ConditionalOnWebApplication / @ConditionalOnClass / ...
  • 조건에 따라 해당 클래스를 등록할 때도, 등록하지 않을 때도 있다.
  • 해당 클래스를 등록하더라도, @Bean이 선언된 특정 메소드를 사용할 때도, 사용하지 않을 때도 있다.

 

설정 커스텀

  • @EnableAutoConfiguration 대신 @Configuration을 사용하면 스프링부트 어플리케이션을 커스텀할 수 있다.
  • Ex) 웹 어플리케이션이 아닌 타입으로 실행하면 정상적으로 실행됨 (서블릿 설정이 제외된 채로)

 

 

 

댓글