[Spring] 컴포넌트 스캔

GWANSU SHIN·2022년 7월 25일
0

spring

목록 보기
4/7

컴포넌트 스캔 (@ComponentScan)

  • 설정 정보(AppConfig)에 직접 등록할 Spring Bean을 등록하지 않고
  • 자동으로 Spring Bean을 등록하는 기능
  • @Component Annotation이 붙은 클래스를 스캔해서 Spring Bean으로 등록
  • 의존 관계를 자동으로 주입하는 @AutoWired 라는 기능도 제공

    @Configuration 이 컴포넌트 스캔의 대상이 된 이유도 @Configuration 소스코드를 열어보면 @Component Annotation이 붙어있기 때문이다

AutoAppConfig.java

@Configuration
@ComponentScan(
        basePackages = "gwshin.core",   // default: 현재 ComponentScan이 붙은 클래스의 위치
        basePackageClasses = AutoAppConfig.class,

        // AppConfig 유지하기 위함
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {

}

기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다!

실행 과정

1. @ComponentScan

  • @ComponentScan@Component 가 붙은 모든 클래스를 Spring Bean으로 등록
  • Spring Bean의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다.
    • 빈 이름 기본 전략: MemberServiceImpl 클래스 -> memberServiceImpl
    • 빈 이름 직접 지정: @Component("memberService2")

2. @AutoWired

  • 생성자에 @Autowired 를 지정하면, 스프링 컨테이너가 자동으로 해당 Spring Bean을 찾아서 주입
  • 기본 조회 전략: 타입이 같은 빈을 찾아서 주입
    • getBean(MemberRepository.class) 와 동일하다고 이해하면 된다.

Reference

[인프런] 스프링 핵심 원리 - 기본편

0개의 댓글