Java/Spring with Error
[해결 방법] NoUniqueBeanDefinitionException
HJ0216
2024. 9. 4. 22:39
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();
}
}
|
📑
참고 자료