[Spring] 컴포넌트 스캔

Jaeyoo (유재형)·2022년 2월 21일
1
post-thumbnail

컴포넌트 스캔과 의존관계 자동 주입


이전에 사용했던 스프링 빈 등록

스프링 컨테이너 생성 과정

이전 게시물에서는 스프링 빈을 등록할때 @Bean을 사용해 @Configuration에 스프링 빈을 나열했다.

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }
    ...

하지만 프로젝트가 커지면 많은 스프링빈을 다 등록하기가 힘들고 누락하는 경우도 생긴다 그리고 설정 정보도 커지게된다.

스프링에서는 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능과 의존 관계를 자동으로 주입하는 @Autowired를 제공한다.

컴포넌트 스캔 사용 방법

  • 기존의 AppConfig에 @ComponentScan 사용
    • @Bean을 등록하지 않음
    • 컴포넌트 스캔은 이름 그대로 @Component 어노테이션이 붙은 클래스를 스캔해서 스프링 빈에 등록
@Configuration
@ComponentScan
public class AutoAppConfig {

}
  • 각 클래스가 컴포넌트 스캔의 대상이 되도록 @Component 어노테이션을 붙여준다.
    • 의존관계 주입은 생성자에 @Autowired를 사용하면 된다.
@Component
public class MemberServiceImpl implements MemberService {

    private final MemberRepository memberRepository;
    
    @Autowired
    public MemberServiceImpl(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
    ...

@ComponentScan

  • @ComponentScan@Component가 붙은 모든 클래스를 스프링 빈으로 등록
  • 스프링빈의 기본이름은 클래스명을 사용(맨 앞글자만 소문자)
    • 빈 이름을 직접 지정하고싶으면 @Component("") 하면된다.

@Autowire

  • 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입
  • 타입이 같은 빈을 찾아서 주입한다.
profile
기록과 반복

0개의 댓글