반응형
동일한 타입의 Bean에 대해 @Autowired를 적용해 주어야 하는 상황이면
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'XXXX' available: expected single matching bean but found N
라는 에러가 발생한다. (대충 특정 타입(XXX)의 빈을 사용해야하는데 해당 타입의 빈이 여러개 발견되어 문제가 발생했다!)
이럴 때 해결 방법 두가지.
- @Primary
- @Qualifier
1. @Primary
동일한 타입의 여러 Bean 중에 @Primary 어노테이션을 붙여준다. 그럼 해당 어노테이션이 붙은 Bean이 우선권을 받게되어 프로그램 실행 시 해당 Bean으로 DI를 해주게 된다.
ex)
@Primary
@Repository
public class AhnddingRepository implements Repository{
...
}
2. @Qualifier
이는 @Autowired(DI해주는 곳) 어노테이션이 붙는 곳에 @Qualifier 어노테이션을 붙여준다. 단, @Qualifier만 하면 안되고 @Qualifier("BeanId") 로 특정 Bean의 Id를 넣어줘야한다. Bean 클래스 명이 AhnddingRepository
라면 Bean Id는 ahnddingRepository
가 된다.
ex)
@Qualifier("ahnddingRepository")
@Autowired
private Repository repository;
반응형