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();
    }
}

 

 

 

📑

참고 자료

https://velog.io/@kk_y_oo1/Spring-NoUniqueBeanDefinitionException-%EC%9B%90%EC%9D%B8%EA%B3%BC-%ED%95%B4%EA%B2%B0

 

[Spring] NoUniqueBeanDefinitionException 원인과 해결

Autowired 는 타입(Type)으로 조회하기 때문에, 동일한 타입의 빈이 2개 이상일 때 문제가 발생한다.org.springframework.beans.factory.UnsatisfiedDependencyException : Error creating bean w

velog.io