Java/Spring

조회되는 bean이 두개 이상일 때

필리힐리 2021. 9. 12. 22:18

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/lecture/55378?tab=curriculum&speed=1.5 

 

스프링 핵심 원리 - 기본편 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

@Autowired의 기본 스캔 방식

 

OrderServiceImpl은 인터페이스인 DiscountPolicy만 의존한다.

그런데 의존관계를 설정할 때 스프링 컨테이너에 구현체 FixdiscountPolicy, RateDiscountPolicy 둘 다

bean으로 등록 되어 있으면 @Autowired는 어떤 객체를 선택할까?

 

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

 

@Autowired는 기본적으로 타입 (DiscountPolicy.class) 으로 매칭을 한다.

하나가 매칭되야하는데 구현체 두 개를 찾아서 어떤 걸 선택해야하는지 모르겠다는 에러가 나온다.

 

해결 방법은 세가지가 있다.

 

1. 파라미터명을 구현체 이름으로 지정 (@Autowired는 타입을 찾고 두 개 이상이면 필드, 파라미터 명으로 매칭)

 

 

2. @Qualifier을 통해 특정 이름 지정

 

 

3. @Primary로 최우선 순위 지정

'Java > Spring' 카테고리의 다른 글

서버, 서블릿, 멀티쓰레드 개념  (0) 2021.09.15
초기화 콜백, 소멸 콜백  (0) 2021.09.13
롬복  (0) 2021.09.12
컴포넌트 스캔과 의존성 자동 주입  (0) 2021.09.11
싱글톤 방식 문제점  (0) 2021.09.10