카테고리 없음

[Spring] 동일한 Type의 Bean이 여럿일 때

hi,ho 2020. 11. 24. 16:27
반응형

동일한 타입의 Bean에 대해 @Autowired를 적용해 주어야 하는 상황이면

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'XXXX' available: expected single matching bean but found N 

라는 에러가 발생한다. (대충 특정 타입(XXX)의 빈을 사용해야하는데 해당 타입의 빈이 여러개 발견되어 문제가 발생했다!)

이럴 때 해결 방법 두가지.

  1. @Primary
  2. @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;
반응형