@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개 있을 때 해결이 안됩니다.
참조
'Spring' 카테고리의 다른 글
[스프링 핵심 원리 - 기본편] 애노테이션 직접 만들기 (0) | 2021.09.20 |
---|---|
[스프링 핵심 원리 - 기본편] @Autowired 필드 명, @Qualifier, @Primary (0) | 2021.09.20 |
[스프링 핵심 원리 - 기본편] 롬복과 최신 트랜드 (0) | 2021.09.20 |
[스프링 핵심 원리 - 기본편] 생성자 주입을 선택해라! (0) | 2021.09.20 |
[스프링 핵심 원리 - 기본편] 옵션 처리 (0) | 2021.09.20 |
댓글