@ComponentScan

Yuno·2024년 8월 14일
0

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)

  1. 기본 패키지에서 컴포넌트 검색
@Configuration
@ComponentScan
public class AppConfig {
}

@ComponentSacnAppConfig 가 정의된 패키지와 그 하위 패키지에서 컴포넌트를 검색

  1. 특정 패키지에서 컴포넌트 검색
@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
}

com.example.myapp 패키지와 그 하위 패키지에서 컴포넌트를 검색

  1. 여러 패키지에서 컴포넌트 검색
@Configuration
@ComponentScan(basePackages = {"com.example.myapp", "com.anotherpackage"})
public class AppConfig {
}

여러 패키지에서 컴포넌트를 검색

  1. 특정 클래스의 패키지에서 컴포넌트 검색
@Configuration
@ComponentScan(basePackageClasses = MyClass.class)
public class AppConfig {
}

MyClass 가 위치한 패키지에서 컴포넌트를 검색

  1. 필터를 사용하여 컴포넌트 검색
@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로 끝나는 클래스는 포함됨

profile
Hello World

0개의 댓글