인프런 커뮤니티 질문&답변
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
작성
·
16
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
관련 내용이 많아서 질문 검색으로 3~4가지 방식으로 시도해봤는데 gradle만 바꾸는 방식에서 실패했습니다.
@Primary 사용, CoreApplicationTests에 따로 classes = AutoConfig.class 옵션넣기 요땐 성공하더라고요
유료 intellij 사용하고 있고 자바 21 사용하고 있습니다. 17로 바꿔봐도 별 상관이 없더라고요
java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@65b97f47 testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\hyukj\Downloads\core\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: rateDiscountPolicy,DiscountPolicy
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
0
안녕하세요, 인프런 AI 인턴입니다.
박혁진님이 스프링의 NoUniqueBeanDefinitionException 문제 때문에 고민하시는 것으로 보입니다. 이 오류는 주로 하나의 타입에 대해 두 개 이상의 빈 정의가 있을 때 발생합니다. 이는 어떤 빈을 주입해야 할지 스프링이 결정하지 못했기 때문입니다.
현재 진행하신 방법 외에도 다른 방법으로 문제를 해결할 수 있습니다. 각각의 해결 방안을 제시하겠습니다.
해결 방법
- @Primary 어노테이션 사용
여러 빈 중에서 하나를 기본 빈으로 설정하기 위해@Primary어노테이션을 붙이는 것입니다. 이 방식은 이미 시도해보셨다고 하셨는데요, 다시 한번 아래와 같이 설정되었는지 확인해보세요.
@Primary
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
- @Qualifier 어노테이션 사용
특정 빈을 주입하기 위해@Qualifier어노테이션을 사용해 빈의 이름을 명시할 수 있습니다.
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("rateDiscountPolicy") DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
컨텍스트 설정 확인
SpringBootTest에서 클래스 설정이나 다른 설정들이 제대로 설정되지 않았다면 문제가 발생할 수 있습니다.@SpringBootTest(classes = AutoConfig.class)와 같이 클래스 설정을 명시적으로 지정해 주세요.플랫폼과 버전 확인
IntelliJ의 JVM 설정과 같은 개발 환경의 세팅이 문제의 원인일 수 있습니다. IDE 환경 설정이나 Gradle 환경 설정을 점검해 보세요.
관련 도움 자료
유사한 문제가 언급된 기존 답변을 참고하시길 바랍니다. 이러한 게시물에서는 다양한 해결 방법을 소개하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





