Spring - 컴포넌트 스캔 & @Autowired

YUNU·2023년 8월 3일
0

스프링

목록 보기
16/33
post-thumbnail

🌱 Spring


🟦 컴포넌트 스캔 & @Autowired

등록해야 할 스프링 빈이 많다면 @Bean 어노테이션을 통해 일일이 등록하기에는 매우 비효율적

➡️ 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능 제공

컴포넌트 스캔을 사용하려면 @ComponentScan 어노테이션을 설정 정보에 붙여주면 된다.
➕ 구현체 클래스(스프링 빈으로 등록할 클래스)에 @Component 어노테이션을 붙여준다.

다만 이전에는 설정 정보(AppConfig)에서 @Bean으로 직접 설정 정보를 작성하고, 의존관계도 명시했으나 컴포넌트 스캔만으로는 의존관계가 설정되지 않음

아래와 같은 수동 주입에서는 orderService는 memberRepository와 discountPolicy에 의존관계 주입 명시

  @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

➡️ 의존관계 주입할 방법이 필요

➡️ 스프링은 의존관계를 자동으로 주입하는 @Autowired라는 기능 제공

🟦 @ComponentScan

@ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록

스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자는 소문자로 변경하여 사용
ex) OrderServiceImpl 클래스 ➡️ orderServiceImpl

빈 이름을 직접 지정하려면 @Component("이름") 형식을 통해 지정 가능


🟦 @Autowired

생성자 위에 @Autowired 어노테이션을 추가하여 의존관계를 자동으로 주입

생성자에 @Autowired를 지정하면, 스프링 컨테이너가 해당 스프링 빈을 자동으로 찾아 주입함
(기본적으로 타입이 같은 빈을 찾아 주입함)


컴포넌트 스캔을 사용하면 @Configuration이 붙은 설정 정보도 자동으로 등록되기 때문에
설정 정보를 여러 개 사용할 경우, 필요에 따라 'excludeFilters'를 사용하여
다른 설정 정보는 스캔 대상에서 제외할 수 있다.

@ComponentScan(
	excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
    )


인프런 스프링 핵심 원리 - 기본편 (김영한) 참조

profile
DDeo99

0개의 댓글