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
로 끝나는 클래스는 포함됨