[Spring boot 토이프로젝트]3. 자동설정 이해하기

Yu River·2022년 7월 25일
0

[1] @SpringBootApplication

  • @SpringBootApplication 어노테이션은 루트 JavaApplication 파일에 선언되어있다.
  • @SpringBootApplication 어노테이션 내부
    • @EnableAutoConfiguration 어노테이션이 있다.
  • @SpringBootApplication은 다음 어노테이션을 나열한 것과 같다.
    • @SpringBootConfiguration
    • @EnableAutoConfiguration
    • @ComponentScan

[2] @EnableAutoConfiguration

  • @SpringBootApplication 안에 숨어 있다.
  • 1단계 빈 스캔 이후 EnableAutoConfiguration으로 빈을 한 번 더 읽어온다.
  • @EnableAutoConfiguration은 spring 메타파일을 읽어와 빈을 스캔한다.

자세한 건 아래에서 살펴보자 ! 😙

[3] 빈을 스캔하는 과정

빈은 크게 2개의 단계로 나눠서 스캔된다.

1단계 👉 @ComponentScan

  • ComponentScan으로 빈을 우선 먼저 읽어온다.
  • @ComponentScan을 통해 빈을 스캔하는 경우 패키지의 위치를 잘 숙지하도록 한다!
    • @ComponentScan이 달린 자신의 파일로부터 시작해서 그 하위 패키지를 스캔하지 그 외에 범위를 벗어나면 스캔하지 않기 때문이다.
  1. @ComponentScan이 달린 자신의 파일로부터 시작해서 그 하위 패키지까지 전부 다@Component라는 어노테이션을 가진 클래스들을 스캔해서 빈으로 등록한다.
    • [@Component라는 어노테이션을 가진 클래스들의 예시]
      • @Configuration
      • @Repository
      • @Service
      • @Controller
      • @RestController
  2. @ComponentScan이 달린 자신의 파일에서 @Configuration 어노테이션을 달면 자기 자신도 빈이 된다.

2단계 👉 @EnableAutoConfiguration

  • 1단계 빈 스캔 이후 EnableAutoConfiguration으로 빈을 한 번 더 읽어온다.
  • @EnableAutoConfiguration은 spring 메타파일을 읽어온다.
    • spring 메타파일의 위치는 spring-boot-autoconfigure 의존성 안의
      META-INF 폴더에 위치한다.
      (org.springframework.boot.autoconfigure.EnableAutoConfiguration)
    • spring 메타파일명은 spring.factories이다.

    • spring.factories 메타파일에 기재되어있는 키값들이 전부 autoconfiguartion의 대상이 된다.
      • 해당 클래스들은 모두 다 @Configuration 어노테이션을 달고있다.
      • 하지만 모두 동시에 설정되는 건 아니며 조건에 따라 설정여부가 달라진다.
        그리고 해당 조건들은 다음과 같이 conditional~ 이 달린 어노테이션에 따라 달라진다. 👉 @ConditionalOnXxxYyyZzz
  • 즉 , ComponentScan이 있다면 EnableAutoConfiguration이 없어도 빈을 읽어온다.

[4] 웹 애플리케이션의 작동 원리 정리

  • 다음과 같이 루트 JavaApplication 파일에 선언된 @SpringBootApplication 과 그 안에 있는 @EnableAutoConfiguration

  • spring.factories 안에 선언된 수많은 자동설정들이 조건에 따라 적용이 되어
  • 수 많은 빈들이 생성이 되어 다음 캡쳐와 같이 웹애플리케이션이 작동되는 것이다.

스프링부트개념과활용:자동설정이해참고

profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글