[Spring][IoC] @Component와 컴포넌트 스캔(Component Scan)

2022. 11. 1. 10:49JAVA/Spring

1. 컴포넌트 스캔(Component Scan)의 주요기능

컴포넌트 스캔은 스프링 프레임워크가 스프링 빈(Bean)으로 등록할 준비가 되어있는 클래스들을 스캔한 다음 빈으로 등록하는 기능입니다. 컴포넌트의 주요 기능은 2가지입니다.

  • 스캔 범위 : 컴포넌트를 어디부터 어디까지 스캔할지 탐색 범위를 설정
  • 필터링 : 컴포넌트 스캔중 특정한 클래스는 빈으로 생성하지 않음

 

2. 컴포넌트 스캔 대상

다음 애노테이션들은 @Component 애노테이션을 갖고 있기 때문에 컴포넌트 스캔의 대상이 되어 빈으로 등록됩니다.

  • @Component
  • @Repository
  • @Service
  • @Controller, @RestController
  • @Configuration

 

3. @ComponentScan의 동작 원리

  • @ComponentScan 애노테이션은 스캔할 패키지 범위와 애노테이션에 대한 정보를 가지고 있음
  • 실제 스캐닝은 BeanFactoryPostProcessor라는 인터페이스의 구현체인 ConfigurationClassPostProcessor에 의해서 처리됨
    • BeanFactoryPostProcessor 빈 : 다른 빈들이 생성되기 이전에 실행됨. 이 빈을 수행하여 컴포넌트 스캔을 수행함

 

References

[인프런] 스프링 프레임워크 핵심 기술