@Autowired
는 타입(Type) 으로 조회된다.ac.getBean(DiscountPolicy.class)
NoUniqueBeanDefinitionException
오류 발생!!!
해결 방법
@Autowired
필드 명 매칭@Qualifier
➡️ @Qualifier 끼리 매칭 ➡️ 빈 이름 매칭@Primary
사용// 기존코드
@Autowired
public DiscountPolicy discountPolicy
// 필드명으로 빈 이름을 변경
@Autowired
public DiscountPolicy rateDiscountPolicy
@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {}
@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy {}
@Qualifier
를 붙여주고 등록한 이름을 적어 줌생성자 자동 주입 예시
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@Qualifier("mainDiscountPolicy") DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
@Primary
는 우선순위를 정하는 방법 @Component
@Primary
public class RateDiscountPolicy implements DiscountPolicy {}
@Component
public class FixDiscountPolicy implements DiscountPolicy {}
📍 @Qualifier 의 단점은 주입 받을 때 모든 코드에 @Qualifier 를 붙여줘야 한다
@Qualifier 와 @Primary 우선순위
@Qualifier
가 우선권이 높다이 게시글은 인프런 김영한님의 스프링 강의를 정리한 글입니다.