컴포넌트 스캔의 주요 기능
●스캔 위치 설정
●필터: 어떤 어노테이션을 스캔할지 또는 하지 않을지 설정
스프링 부트 기준으로 @SpringBootApplication 어노테이션 안에 @ComponentScan을 가지고 있기 때문에
@SpringBootApplication를 등록한 메인 클래스가 포함한 패키지부터 이하의 모든 패키지를 스캔해줌
@ComponentScan 이 모든 객체를 빈으로 등록해주는 것은 아님
excludeFilter를 통해 걸러낼 수 있음
@ComponentScan에는 어디부터 어떻게 스캔할 것인지와 어느 것을 걸러낼 것인지 필터 해주는 속성이 존재하고
아래 어노테이션이 모두 빈으로 등록됨
@ComponentScan 대상들
@Repository
@Service
@Controller
@Configuration
동작원리
@ComponentScan은 실제 스캐닝은 ConfigrationClassPostProcess라는 BeanFactoryPostProcessor에 의해 처리됨