본문 바로가기
Spring

[스프링 핵심 원리 - 기본편] 조회 빈이 2개 이상 - 문제

by 박성민 2021. 9. 20.

@Autowired는 타입(Type)으로 조회합니다.

@Autowired
private DiscountPolicy discountPolicy

타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작합니다. (실제로는 더 많은 기능을 제공합니다.)
ac.getBean(DiscountPolicy.class)

스프링 빈 조회 시 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생합니다.
NoUniqueBeanDefinitionException 오류가 발생합니다.

NoUniqueBeanDefinitionException: No qualifying bean of type 
'hello.core.discount.DiscountPolicy' available: expected single matching bean 
but found 2: fixDiscountPolicy,rateDiscountPolicy

오류메시지가 친절하게도 하나의 빈을 기대했는데 fixDiscountPolicy, rateDiscountPolicy 2개가 발견되었다고 알려줍니다.

이때 하위 타입으로 지정할 수도 있지만, 하위 타입으로 지정하는 것은 DIP를 위배하고 유연성이 떨어집니다.
그리고 이름만 다르고, 완전히 똑같은 타입의 스프링 빈이 2개 있을 때 해결이 안됩니다.

참조

댓글