문제 상황: BookRepository를 인터페이스로 설정하고 BookMySqlRepository, BookMomoryRepository 두 가지의 구현체를 설정하던 중, 에러가 발생했다. 클래스의 구조는 아래 그림과 같다.
< 에러 메세지 >
Description:
Parameter 0 of constructor in com.group.libraryapp.service.BookService required a single bean, but 2 were found:
- bookMemoryRepository: defined in file [/Users/jjinsu/IdeaProjects/library-app/out/production/classes/com/group/libraryapp/repository/BookMemoryRepository.class]
- bookMysqlRepository: defined in file [/Users/jjinsu/IdeaProjects/library-app/out/production/classes/com/group/libraryapp/repository/BookMysqlRepository.class]
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
< 원인 >
해당 오류의 원인은 '빈 중복' 오류라고 한다. 스프링이 빈에 등록되어 있는 BookMysqlRepository와 BookMemoryRepository 둘 중 어떤 의존성을 주입하라는 건지 몰라서 생기는 오류이다. 스프링에서 제시한 해결 방법엔 3가지가 있고, 나는 1번 방법인 @Primary 어노테이션을 사용해 문제를 해결해 주었다.