[Spring] @Autowired 조회 대상 빈이 2개 이상일 경우

gnoesnooj·2021년 12월 7일
0

@Autowired 의 조회 대상 빈이 2개 이상일 때

  • @Autowired 필드명 매칭
  • @Qualifer -> @Qualifer 끼리 매칭 -> 빈 이름 매칭
  • @Primary 사용

타입, 필드명 매칭 정리

  1. 타입 으로 우선 매칭
  2. 타입의 매칭결과가 2개이상일 때, 필드명, 파라미터 이름으로 빈을 매칭시킨다.

@Qualifier

RateDiscountPolicy.java

@Componetnt
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy{
	...
} // RateDiscountPolicy 에 Qualifier 이름을 정해준다.

FixDiscountPolicy.java

@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy{
	...
} // FixDiscountPolicy 에도 Qualifier 이름을 붙여준다.

OrderServiceImpl.java

public class OrderServiceImpl implements OrderService{
	...
    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy){
    ... 
    }
} // 매개변수의 discountpolicy 에 사용할 DiiscountPolicy 구현체의 Qualifier name 을 붙여서 사용한다.

@Primary

여러 개의 Bean 이 조회가 될 때, @Primary 가 붙어있는 구현체의 의존성이 먼저 주입된다.

@Primary , @Qualifier 둘다 되어있다면, 뭐가 우선순위일까 ?

-> 스프링에서는 자동보다는 수동, 넓은 것 보다는 좁은 범위의 선택권이 우선순위가 높기 때문에, @Qualifier 가 우선권을 가진다.

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글