일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- BFS
- error
- CVE
- 분할 정복
- 누적 합
- Spring
- 시뮬레이션
- 재귀
- 그리디
- 맵
- 위상 정렬
- 최단 경로
- 이분 탐색
- DP
- 백트래킹
- JPA
- GCP
- c++
- thymeleaf
- 스택
- Reversing
- 문자열
- java
- web
- 데이크스트라
- OS
- 구현
- dfs
- dynamic debugging
- 우선순위 큐
- Today
- Total
hades
[Spring] 같은 클래스의 빈이 두 개 이상일 때 본문
🚨 에러
Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found:
- memoryMemberRepository: defined in file [C:\Users\hades\Desktop\study\core\out\production\classes\hello\core\member\MemoryMemberRepository.class]
- memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]
🔍 분석
MemberServiceImpl이 하나의 빈을 요구하는데, 2개가 발견되었다고 한다.
MemberServiceImpl은 MemberRepository를 주입받고 있다.
2개의 빈이 발견된 지점으로 가보자.
@Component
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
MemoryMemberRepository는 @AutoScan에 의해 memoryMemberRepository라는 스프링 빈으로 등록된다.
@Configuration
public class AppConfig {
...
@Bean
public MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
...
}
@Bean에 의해 메소드 명인 memberRepository으로 스프링 빈에 저장된다.
따라서, MemberServiceImpl은 주입받을 수 있는 MemberRepository가 2개인 것이다.
👊 해결
가장 쉬운 방법은 memoryMemberRepository에서 @Component를 지우던지, AppConfig에서 memberRepository 메소드를 지우면 된다.
근본적으로는 @AutoScan과 @Configuration을 둘다 사용했기 때문에 문제가 발생한다. 이 둘 중 하나를 지우는 것이 바람직할 것이다.
'🏃🏻♂️ 기본훈련 > Spring' 카테고리의 다른 글
[Thymeleaf] 텍스트 리터럴 (0) | 2024.08.05 |
---|---|
[Thymeleaf] 템플릿 위치 (0) | 2024.07.29 |
[Spring] 스프링 기초 (3) (0) | 2024.07.27 |
[Spring] 스프링 기초 (2) (0) | 2024.07.24 |
[Spring] 스프링 기초 (1) (0) | 2024.07.22 |