org.springframework.beans.factory.NoUniqueBeanDefinitionException
Environment
Language: Java 17
DB: MySQL, Redis
오류
1
2
3
4
5
6
|
org.springframework.beans.factory.UnsatisfiedDependencyException :
Error creating bean with name '...' defined in file [경로]:
Unsatisfied dependency expressed through constructor parameter 1;
nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type '...' available:
expected single matching bean but found 2:
|
memberRepository instance 설정 시 오류 발생
원인
1
2
3
4
5
6
|
@RequiredArgsConstructor
@Service
public class MemberService {
private final MemberRepository memberRepository;
// ...
}
|
MemberRepository의 구현체가 2개 이상일 때, 어떤 Bean을 설정할지 결정할 수 없음
해결
1. @Primary 사용
이 어노테이션이 붙은 빈이 우선적으로 주입
1
2
3
4
5
6
7
8
9
10
|
@Repository
@Primary
public class MemberRepositoryImpl1 implements MemberRepository {
// 구현 내용
}
@Repository
public class MemberRepositoryImpl2 implements MemberRepository {
// 구현 내용
}
|
2. @Qualifier 사용
어떤 빈을 주입할지 명시적으로 지정
추가로 이름을 구분하여 사용하기 위한 용도로 실제 빈의 이름을 변경하는 것은 아님
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@RequiredArgsConstructor
@Service
public class MemberService {
private final MemberRepository memberRepository;
}
@Repository("firstRepositoryImpl")
public class MemberRepositoryImpl1 implements MemberRepository {
// 구현 내용
}
@Repository("secondRepositoryImpl")
public class MemberRepositoryImpl2 implements MemberRepository {
// 구현 내용
}
|
3. SpringConfig에서 Bean 직접 등록
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
|
📑
참고 자료
'Java > Spring with Error' 카테고리의 다른 글
[해결 방법] TooManyActualInvocations (0) | 2024.09.22 |
---|---|
[해결 방법] Argument(s) are different! (0) | 2024.09.15 |
[해결방법] io.jsonwebtoken.ExpiredJwtException (0) | 2024.08.30 |
[해결방법] JWT Login 시, accessToken이 null (0) | 2024.08.18 |
[해결 방법] Could not find javax.servlet:jstl (0) | 2023.10.03 |