You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
orderServiceImpl에서 DiscountPolicy를 주입 받는다.
기존 코드에서는 RateDiscountPolicy만 Component로 등록되어 문제가 없었으나
만약 FixDiscountPolicy도 Component로 등록하게 되는 경우 DiscountPolicy를 조회하는 경우 2개의 빈이 조회되는 문제가 발생한다.
Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy
How
조회 대상 빈이 2개 이상일 때 대처법
Autowired 필드 명 매칭
타입으로 확인 -> 기존은 필드명도 discountPolicy 였으므로 2번 역할이 무의미하다
What
orderServiceImpl
에서DiscountPolicy
를 주입 받는다.기존 코드에서는
RateDiscountPolicy
만Component
로 등록되어 문제가 없었으나만약
FixDiscountPolicy
도Component
로 등록하게 되는 경우DiscountPolicy
를 조회하는 경우 2개의 빈이 조회되는 문제가 발생한다.How
Autowired 필드 명 매칭
필드명을
fixDiscountPolicy
로 지정하는 경우 문제 없이 돌아가는 것을 알 수 있다.Qualify 사용
Qualify
는 추가 구분자를 붙여주는 방법이다.Qualifier
끼리 매칭NoSuchBeanDefinitionException
발생Qualifier
는Qualifier
가 붙은 애들끼리 찾을 때 사용하는게 유용하다.단점
@Qualifer
를 쓰는 쪽도 등록하는 쪽도 모두 붙여주어야 함@Qualifier
를 포함한 커스텀 어노테이션으로 해결이 가능함Primary 사용
Primary
는 우선순위를 정하는 방법이다.우선 순위가 높은 빈에
@Primary
를 붙여주면 된다.Qualifier와 Primary의 우선권
늘 그렇지만 수동에 가까운 쪽이 더 높은 우선권을 갖게 된다.
이 경우
@Qualifier
가@Primary
보다 높은 우선권을 갖는다.The text was updated successfully, but these errors were encountered: