티스토리 뷰

반응형

에러 내역

"expected single matching bean but found *"빈을 주입할 때 여러개의 빈이 조회가 되면 에러가 발생한다.

 

해결 방법은 3가지가 있다.

  • @Autowired 필드명
  • @Qualifier
  • @Primary

 

 

@Autowired 필드명

@Autowired에서 여러 빈이 매칭되면, 필드의 이름으로 매칭한다.

 

변경 전
변경 후

변경전 코드에서 DiscountPolicy가 여러개 매칭되어 문제가 발생하였다. DiscountPolicy의 필드명 discountPolicy를 매칭할 빈의 이름으로 변경을 해준다면 문제가 해결된다.

 

 

@Qualifier 

@Qualifier은 구분할 수 있는 조건을 하나 더 추가하는 방법이다.

 

 

겹치는 빈 1
겹치는 빈 2

겹쳐지는 빈들 대상으로  @Qualifier을 사용하여 추가적인 이름을 붙여 준다.

 

필드 앞에 @Qualifier 추가

필드 앞에 @Qualifer을 추가하여 어떤 빈을 사용할 것인지 적어준다.

 

@Primary

@Primary는 우선순위를 지정하는 방법이다. 여러 빈이 매칭될 때 @Primary가 붙은 빈이 사용된다.

 

@Primary를 붙인 모습

겹치는 빈 중에서 많이 쓰는 빈이 있다면 @Primary를 붙이고 적게 사용하는 빈은 그 외의 방법을 사용하면 된다.

 

RateDiscountPolicy를 90% 사용하고 FixDiscountPolicy를 10% 정도 사용하면 @Primary를 RateDiscount에 사용하고 그 외의 경우에는 @Qualify나 혹은 @Autowired가 붙은 생성자의 필드에 이름을 지정하는 식으로 사용하면 된다.

 

@Primary를 사용하면 @Qualify보다 작성해야 하는 코드가 줄어들기 때문에 간단하다는 장점이 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함