@Autowired
private DiscountPolicy discountPolicy;
@Autowired 는 타입(Type)으로 조회하기 때문에 다음 코드와 유사하게 동작한다. (실제 더 많은 기능 제공)
ac.getBean(DiscountPolicy.class);
타입으로 조회시 선택된 빈이 2개 이상일 때 문제가 발생한다.
DiscountPolicy 하위 타입인 FixDiscountPolicy, RateDiscountPolicy 둘 다 스프링 빈으로 선언한다. (테스트를 먼저 돌려보고 성공하면 작업 시작)
- src/main/java/hello/core/discount/FixDiscountPolicy.java
@Component
public class FixDiscountPolicy implements DiscountPolicy {}
- src/main/java/hello/core/discount/RateDiscountPolicy.java
@Component
public class RateDiscountPolicy implements DiscountPolicy {}
이후 DiscountPolicy 를 사용하는 클래스에 @Autowired 로 의존관계 자동 주입을 실행하면 NoUniqueBeanDefinitionException 오류가 발생한다.
- 콘솔
Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\admin\IdeaProjects\core\build\classes\java\main\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\admin\IdeaProjects\core\build\classes\java\main\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy
...
No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy
오류메시지에 친절하게도 하나의 빈을 기대했는데 fixDiscountPolicy, rateDiscountPolicy 2개가 발견되었다고 알려준다.
이 때 @Autowired 를 인터페이스가 아닌 하위 클래스 타입으로 지정할 수 있지만, DIP를 위배하고 유연성이 떨어진다.
이렇게 인터페이스 구현체의 이름만 다르고 완전히 똑같은 타입의 스프링 빈이 2개 있을 때 해결되지 않는다. (자식 여러개)
스프링 빈을 수동 등록해서 문제를 해결해도 되지만, 의존 관계 자동 주입에서 해결하는 여러 방법이 있다.
참고링크 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8?cid=325969
스프링 핵심 원리 - 기본편| 김영한 - 인프런 강의
현재 평점 5.0점 수강생 49,567명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 스프링 기본 기능, 스프
www.inflearn.com
'강의 실습 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| 어노테이션 직접 만들기 - @Qualifier 재정의 (0) | 2026.04.29 |
|---|---|
| @Autowired 필드 명, @Qualifier, @Primary (0) | 2026.04.28 |
| 롬복과 최신 트랜드 (0) | 2026.04.27 |
| 생성자 주입을 선택해라! (0) | 2026.04.26 |
| 옵션 처리 (0) | 2026.04.25 |
댓글