Spring Framework에서 컴포넌트를 자동으로 스캔하여 Spring 컨테이너에 빈으로 등록하는 데 사용됨. 이 어노테이션은 주로
@Configuration클래스와 함께 사용되어, 지정된 패키지에서 컴포넌트 클래스를 검색하고 빈으로 등록함
기본적으로 @ComponentScan 어노테이션은 주어진 패키지에서 @Conponent, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스를 자동으로 검색하고 빈으로 등록함
import org.springframework.context.annotation.ConponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackage = "com.example.myapp")
public class AppConfig {
}
com.example.myapp 패키지와 그 하위 패키지에서 컴포넌트를 검색하고 빈으로 등록
basePackage : 스캔할 패키지를 지정. 여러 패키지를 지정하려면 배열을 사용@ComponentScan(basePackages = {"com.example.myapp", "com.example.anotherpackage"})
basePackageClasses : 스캔할 패키지를 지정하는 대신, 특정 클래스를 지정하여 그 클래스가 속한 패키지에서 컴포넌트를 스캔@ComponentScan(basePackages = MyClass.class)
excludeFilters : 컴포넌트 스캔에서 제외할 필터를 정의. 다양한 유형의 필터를 사용할 수 있음@ComponentScan(
basePackages = "com.example.myapp",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Deprecated.class)
includeFilters : 컴포넌트 스캔에서 포함할 필터를 정의. 다양한 유형의 필터를 사용할 수 있음@ComponentScan(
basePackages = "com.example.myapp",
includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*Service")
lazyInit : 빈을 지연 로딩할지 여부를 설정. 기본값은 false@ComponentScan(basePackages = "com.example.myapp", lazyInit = true)
@Configuration
@ComponentScan
public class AppConfig {
}
@ComponentSacn 은 AppConfig 가 정의된 패키지와 그 하위 패키지에서 컴포넌트를 검색
@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
}
com.example.myapp 패키지와 그 하위 패키지에서 컴포넌트를 검색
@Configuration
@ComponentScan(basePackages = {"com.example.myapp", "com.anotherpackage"})
public class AppConfig {
}
여러 패키지에서 컴포넌트를 검색
@Configuration
@ComponentScan(basePackageClasses = MyClass.class)
public class AppConfig {
}
MyClass 가 위치한 패키지에서 컴포넌트를 검색
@Configuration
@ComponentScan(
basePackages = "com.example.myapp",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, class = Deprecated.class),
includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*Service")
)
public class AppConfig {
}
@Deprecated 어노테이션이 붙은 클래스는 제외하고, Service로 끝나는 클래스는 포함됨