🔎 @ComponentScan

정의

@ComponentScan지정한 패키지와 하위 패키지를 스캔해서 @Component 계열 Bean을 자동 등록하는 애너테이션이다.

@Component, @Service, @Controller, @Repository 같은 애너테이션이 붙은 클래스를 찾아 Spring Container에 Bean으로 등록한다.

🧩 역할

  • 컴포넌트 스캔 범위를 지정한다.
  • 스캔된 클래스를 Bean으로 등록한다.
  • 설정 클래스에서 자동 빈 등록을 활성화한다.

🛠 사용 속성

속성 기능
basePackages 스캔할 기본 패키지 경로를 지정한다.
basePackageClasses 기준이 되는 클래스를 지정한다.
includeFilters 스캔 대상에 포함할 필터를 지정한다.
excludeFilters 스캔 대상에서 제외할 필터를 지정한다.

🧪 사용 예시

@ComponentScan(basePackages = {"org.infinity.server"})
public class APIConfiguration implements WebMvcConfigurer {
    ...
}
@ComponentScan(basePackageClasses = {UserRepository.class, UserController.class})
public class APIConfiguration implements WebMvcConfigurer {
    ...
}
@ComponentScan(
    useDefaultFilters = false,
    includeFilters = {
        @Filter(type = FilterType.ANNOTATION, value = {Controller.class, RestController.class})
    }
)
public class MyWebMvcConfiguration extends WebMvcConfigurerAdapter {
    ...
}
@ComponentScan(
    basePackages = {"com.mobileleader.rpa"},
    excludeFilters = {
        @Filter(
            type = FilterType.ANNOTATION,
            value = {EnableWebMvc.class, Controller.class, RestController.class, EnableSwagger2.class, EnableTransactionManagement.class}
        ),
        @Filter(type = FilterType.ASSIGNABLE_TYPE, value = QuerydslConfiguration.class)
    }
)
public class RpaViewConfiguration extends AnnotationConfigApplicationContext {
}

⚠️ 주의사항

  • 스캔 범위가 너무 넓으면 원치 않는 Bean까지 등록될 수 있다.
  • includeFiltersexcludeFilters를 함께 쓸 때는 우선순위를 확인해야 한다.
  • 설정 클래스의 위치에 따라 스캔 범위가 달라질 수 있다.

📌 정리

  • @ComponentScan은 컴포넌트 계열 Bean을 자동으로 찾는 애너테이션이다.
  • basePackages와 필터 설정을 통해 스캔 범위를 세밀하게 조정할 수 있다.
  • 설정이 꼬이면 Bean 중복 등록이나 누락이 생길 수 있으니 범위를 명확히 하는 것이 중요하다.

연결문서

댓글남기기