본문 바로가기
웹(web)/백엔드-스프링

스프링 - 컴포넌트 스캔

by 바코94 2024. 6. 15.

스프링 어플리케이션이 구동될 때, 스프링 컨테이너는 스프링 빈 저장소에 등록할 클래스를 찾아서 인스턴스를 생성하여 등록해준다. 

@ComponentScan 어노테이션을 특정 클래스에 붙여 놓으면, 해당 클래스가 위치한 패키지를 스캔할 시작점으로 삼고 하위 패키지를 탐색한다. 이 때, @Component 어노테이션이 붙은 클래스가 빈 저장소에 등록되게 된다. 물론, 클래스의 인스턴스를 생성하여 인스턴스가 등록된다. 

// package com.study.a
@ComponentScan // -> com.study.a 와 그 하위가 스캔의 대상
public class Config{
}

// package com.study.a.a
@Component
public class ClassToBeScaned { 
}

// package com.study.b 
@Component // -> com.study.a 의 하위 패키지가 아니기에 스캔 대상이 아님
public class ClassToBeNotScaned { 
}


위 설명에서 @ComponentScan 을 붙인 클래스의 패키지와 그 하위가 스캔 대상이라고 하였는데, 옵션을 사용하면 변경할 수 있다.
basePackages은 스캔 시작 지점을 명시할 수 있고, basePackageClasses 를 사용하면 해당 클래스가 위치한 패키지로 스캔 시작 지점을 명시할 수 있다. 옵션을 따로 지정하지 않는다면 @ComponentScan 이 적용된 클래스의 패키지가 스캔의 시작점이 된다.