일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링
- 플러터
- php
- 파이썬
- 배열
- JAVA SPRING
- php 프로그래밍 입문 예제
- 페이코 추천인
- php 프로그래밍 입문 3판
- php 프로그래밍 입문 연습문제
- Flutter
- php 프로그래밍 입문 문제풀이
- C언어
- php 프로그래밍 입문 솔루션
- 백준
- SWEA
- Java
- 한정 분기
- 자바
- 최단 경로
- 페이코 친구코드
- 페이코 초대코드
- 자바 스프링
- php 프로그래밍 입문
- 플러터 개발환경 설정
- C
- 페이코 추천인코드
- programmers
- php 프로그래밍
- spring
Archives
- Today
- Total
11-07 11:40
ImJay
[Java Spring] 2-46. 조회 빈이 2개 이상 - 문제 본문
반응형
[Java Spring] 2-46. 조회 빈이 2개 이상 - 문제
@Autowired 는 타입(Type)으로 조회한다.
@Autowired
private DiscountPolicy discountPolicy
타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작한다. (실제로는 더 많은 기능을 제공한다.) ac.getBean(DiscountPolicy.class)
스프링 빈 조회에서 학습했듯이 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생한다.
DiscountPolicy 의 하위 타입인 FixDiscountPolicy , RateDiscountPolicy 둘다 스프링 빈으로 선언해보자.
@Component
public class FixDiscountPolicy implements DiscountPolicy {}
@Component
public class RateDiscountPolicy implements DiscountPolicy {}
그리고 이렇게 의존관계 자동 주입을 실행하면
@Autowired
private DiscountPolicy discountPolicy
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개 있을 때 해결이 안된다.
스프링 빈을 수동 등록해서 문제를 해결해도 되지만, 의존 관계 자동 주입에서 해결하는 여러 방법이 있다.
반응형
'Java Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[Java Spring] 2-48. 애노테이션 직접 만들기 (1) | 2023.03.15 |
---|---|
[Java Spring] 2-47. @Autowired 필드 명, @Qualifier, @Primary (0) | 2023.03.14 |
[Java Spring] 2-45. 롬복과 최신 트랜드 (0) | 2023.03.14 |
[Java Spring] 2-44. 생성자 주입을 선택해라! (0) | 2023.03.14 |
[Java Spring] 2-43. 옵션 처리 (0) | 2023.03.14 |
Comments