[Spring] 컴포넌트 스캔

Hoon·2022년 10월 17일

Spring

목록 보기
6/18

@Bean 통한 빈 등록

스프링 컨테이너에 직접 빈을 등록하려면 아래와 같은 방식으로 등록한다.

@Configuration
public class AppConfig {

 	@Bean
 	public MemberService memberService() {
 		return new MemberServiceImpl(memberRepository());
 	}
 
    @Bean
    public OrderService orderService() {
       return new OrderServiceImpl(
           memberRepository(), 
           discountPolicy());
    }
 
    @Bean
    public MemberRepository memberRepository() {
       return new MemoryMemberRepository();
    }
}

위와 같이 설정 클래스에 @Configuration 어노테이션을 붙힌다.
설정 클래스에 있는 함수들에 일일이 @Bean 어노테이션을 붙히고 의존관계까지 설정해야 했어야 한다.

컴포넌트 스캔

스프링은 컴포넌트 스캔이란 기능을 지원하여 위에 @Bean으로 등록할때 겪는 수고로움을 덜어준다. 아래의 코드를 보자.

@Configuration
@ComponentScan
public class AutoAppConfig {

}

설정 클래스 위에 @Configuration, @ComponentScan만 붙히면 설정 클래스가 컴포넌트 스캔을 할 준비를 마친다.

이제 컴포넌트 스캔으로 등록하는 방법을 알아보자.

@Component
public class MemberServiceImpl implements MemberService {

	private final MemberRepository memberRepository;

    @Autowired // 의존관계 자동 주입
    public MemberServiceImpl(MemberRepository memberRepository) {
       this.memberRepository = memberRepository;
    }
}

클래스위에 @Component를 붙혀주면 컴포넌트 스캔의 대상이 되어 컨테이너에 등록되게 된다.

@Configuration에 수동으로 설정한 Bean이 @Componenet를 붙힌 빈보다는 우선순위를 가지게 된다.

@Autowired를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다.

스프링 프로젝트에 흔히 보이는 @Controller, @Service, @Reposiory같은 어노테이션도 모두 @Component를 포함하고 있기 때문에 컨테이너에 등록되는 것이다.

Reference

스프링 핵심 원리 - 기본편 (김영한님)

profile
개발이 즐거워

0개의 댓글