인프런 커뮤니티 질문&답변

갈릴레이님의 프로필 이미지
갈릴레이

작성한 질문수

스프링 핵심 원리 - 기본편

옵션 처리

NoUniqueBeanDefinitionException 발생원인

작성

·

359

1

contextLoads()에서

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,DiscountPolicy

위와 같은 에러가 발생합니다

1. component로 등록한 rateDiscountPolicy와 bean으로 등록한  DiscountPolicy가 둘 다 new rateDiscountPolicy()라서 중복이라 발생한 예외라고 생각했고 

2. 이 문제를 해결하기 위해서 둘 중 하나를 @Primary붙여주면 될 것 같습니다.

3.  추가로 CoreApplicationTests로 Test 돌리면 AppConfig와  AutoAppConfig에 의해 만들어진 Bean들이 동시에 스프링 컨테이너에 등록되서 발생한 문제라고 생각됩니다

제가 이해한게 맞을까요?

 

답변 1

0

안녕하세요. 갈릴레이님, 공식 서포터즈 David입니다.

1. DiscountPolicy 타입으로 주입될 수 있는 빈들이 2개 이상이라서 그렇습니다.

2. 네, 그렇게 하셔도 됩니다.

3. 중복된 빈을 정의함으로써 발생하는 충돌이 없다면 AppConfig와 AutoAppConfig가 동시에 사용할 수 있습니다.

감사합니다.

안녕하세요 위의 상황과 비슷하게 저는 memebrRepository와 MemoryMemberRepository 빈의 충돌이 일어났는데요

autoconfig와 appconfig 의 빈등록 관련 충돌 때문이라 생각해서 component 로 주입한 memorymemberRepository에 @primary 를 붙여 해결하였습니다

그런데 말씀하신 3번 중복된 빈을 정의함으로써 발생하는 충돌이 없다면이라 하셨는데 autoappconfig 에서 excludeFilters에서 영한님과 동일하게 해주었는데도 동시에 사용불가한 이유가 무엇일까요?

 

갈릴레이님의 프로필 이미지
갈릴레이

작성한 질문수

질문하기