@ComponentScan
🔎 @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까지 등록될 수 있다.
includeFilters와excludeFilters를 함께 쓸 때는 우선순위를 확인해야 한다.- 설정 클래스의 위치에 따라 스캔 범위가 달라질 수 있다.
📌 정리
@ComponentScan은 컴포넌트 계열 Bean을 자동으로 찾는 애너테이션이다.basePackages와 필터 설정을 통해 스캔 범위를 세밀하게 조정할 수 있다.- 설정이 꼬이면 Bean 중복 등록이나 누락이 생길 수 있으니 범위를 명확히 하는 것이 중요하다.
댓글남기기