컴포넌트 스캔(Component Scan)
스프링에서는 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다.
스프링 빈을 등록할 때는 의존관계를 자바 코드로 직접 등록하는 방법과 컴포넌트 스캔과 자동 의존관계 설정하는 @Autowired를 사용하는 방법이 있다.
@ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.
@ComponentScan
public class DependencyConfig {
}
탐색범위(basePackages)
모든 자바 클래스를 컴포넌트 스캔하면 시간이 오래 걸리게 된다. 따라서 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다.
@ComponentScan(basePackages = "hello.Spring")
public class DependencyConfig {
}
basePackages : 탐색할 패키지의 시작 위치를 설정하고, 해당 패키지부터 하위 패키지까지 모두 탐색한다.
basePackageClasses : 통해 클래스가 속한 패키지를 탐색 시작 위치로 지정할 수 있다.
또한, 스프링 부트를 사용하면 일반적으로 @SpringBootApplication을 프로젝트 시작 루트 위치에 둔다.
@SpringBootApplicaiton에는 @ComponentScan이 포함되어 있다.
컴포넌트 스캔의 기본 대상
@ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.
이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다.
빈 이름 기본 전략 : MemberServiceImpl → memberServiceImpl
빈 이름 직접 지정 : @Component(”memberService2”)와 같이 빈의 이름을 직접 설정할 수 있다.
컴포넌트 스캔의 기본 대상
- @Component : 컴포넌트 스캔에서 사용된다.
- @Controller & @RestController : 스프링 MVC 및 REST 전용 컨트롤러에서 사용된다.
- @Service : 스프링 비즈니스 로직에 사용된다. 특별한 처리는 하지 않고, 비즈니스 계층을 인식하는데 도움이 된다.
- @Repository : 스프링 데이터 접근 계층에서 사용된다. 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
- @Configuration : 스프링 설정 정보에서 사용된다. 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
추가적으로 @Controller, @Service, @Repository에는 기본적으로 @Component를 포함하고 있다.
'Spring' 카테고리의 다른 글
[Spring] Validator 검증 (0) | 2024.01.11 |
---|---|
@RequiredAgrsConsturcor (0) | 2024.01.10 |
의존성 주입(Dependency Injection) 방법 3가지 (0) | 2023.08.29 |
스프링 빈을 등록하는 2가지 방법 (0) | 2023.08.29 |
@ResoponseBody 어노테이션이란? (0) | 2023.08.26 |