inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 빈 2개 이상 등록됨 : expected single matching bean but found 2

해결된 질문

1391

dasol199

작성한 질문수 2

0

안녕하세요 스프링 입문 강의 수강 중 궁금한 점이 있어 질문 남깁니다.

Spring Data Jpa를 적용하면서 스프링이 JpaRepository를 가진 인터페이스의 구현체를 자동으로 생성하고 빈으로 등록한다는 것으로 이해했습니다.

따라서 기존의 Repository 클래스들의 @Repository 어노테이션과 @Service 어노테이션을 삭제 후 Configuration으로 직접 빈을 등록하도록 변경하였습니다.

자동 등록되는 어노테이션을 모두 제거하였고, Config 클래스의 memberRepository 빈 등록 부분도 주석처리 해주었으나 MemberRepositoryImpl이 빈으로 등록되어 다음과 같은 에러가 발생합니다.

MemberRepositoryImpl은 어디에서 빈으로 등록되는 건가요??

java mvc spring-boot spring SpringBean MVC

답변 1

1

OMG

안녕하세요. dasol199님, 공식 서포터즈 OMG입니다.
.

강의에서는 MemberRepositoryImpl을 사용하지 않아 어떤 코드를 작성하셨는지 알 수 없습니다.

MemberRepositoryImpl을 지우고 확인해주세요
.
감사합니다.

0

dasol199

강의의 MemoryMemberRepository가 MemberRepositoryImpl입니다

클래스를 지우고 문제를 해결할 수 있지만 어느부분에서 빈이 등록되는지 알고싶어 질문드립니다

강의 순서에 따라

MemoryMemberRepository, JdbcMemberRepository, JdbcTemplateMemberRepository, JpaRepository 순으로 구현체를 변경하였고

이때까지는 문제없이 하나의 빈만 등록되어 정상적으로 동작하는 것을 확인하였습니다.

SpringDataJpaMemberRepository를 Config 클래스에서

@Autowired
public SpringConfig(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}

위와 같이 주입해준 결과 MemoryMemberRepository와 JpaRepository가 둘 다 등록되었습니다.

JpaRepository를 가지고 있는 SpringDataJpaMemberRepository가 자동으로 빈에 등록되는 것은 이해했으나

어디서 MemoryMemberRepository가 빈으로 등록되었는지 모르겠습니다

Config 클래스의 위 코드 제외한 Repository 빈 등록 코드와 각 Repository 클래스의 어노테이션도 삭제된 상태입니다.

 

1

OMG

MemoryMemberRepository, MemberRepositoryImpl에 자동 스프링 빈으로 등록하는 어노테이션을 선언하지 않았다면(@Repository, @Component 등)

스프링데이터JPA 진행중 발생한 상황이라면 아래와 같은 상황으로 보입니다.

영한님의 스프링데이터JPA 강의에서 설명해드리는 내용으로

사용자 정의 구현 클래스 규칙에 해당하여 스프링 빈으로 등록된 상황입니다.

image

imageJPA강의 -> 본 강의

MemberRepository(I) -> SpringDataJpaMemberRepository(I)

MemberRepositoryCustom(I) -> MemberRepository(I)

자세한 내용은 영한님의 스프링데이터JPA 강의 혹은 "사용자 정의 클래스 impl"로 검색하시면 많은 자료들을 확인하실 수 있으니 참고 부탁드립니다.

 

..

0

74

2

Unused property.....

0

98

2

project JDK is misconfigured

0

129

2

외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석

0

82

2

단위/통합 테스트 버전충돌 문제

0

91

2

❗️springboot 4.0.2 버전 aspectj dependency 설정❗️

0

227

1

왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?

0

101

2

윈도우 build test오류 질문

1

102

2

테스트 관련 공부에 대한 조언을 얻고 싶습니다

0

98

2

테스트 실행 시 에러 질문

0

289

1

name을 통한 비교와 객체를 통한 비교

0

77

1

빌드 후 libs 없음

1

128

1

윈도우 gradlew.bat 에러

0

167

1

@PostMapping("/members/new")가 동작하지 않습니다

0

88

1

java static class와 kotlin class

0

77

1

스프링 DB연결

0

126

1

소요 시간

0

85

2

ddl.sql에 빨간 밑줄

1

101

2

welcome page 에러

0

180

3

잘 모르겠습니다.

0

163

2

fail을 똑같이 쳤는데 오류가 발생해요

0

156

2

index.html Welcome page

0

120

1

프로젝트 gradle-groovy ?

0

364

1

테스트코드 메서드명 한글

0

198

2