본문 바로가기
혼자 공부하는 것들/Spring

UnsatisfiedDependencyException 오류 해결! 😂

by applepick 2022. 1. 19.
반응형

인프런 강의를 듣는 도 중 테스트 코드를 작성하고 테스트를 돌리자마자 

이러한 에러를 발생했습니다. ㅠㅠ  한 시간 동안 삽질을 해보면서 깨달음을 얻었습니다. 저 상황은 빈을 생성할 시 해당 빈이 충돌 난 것입니다. 

예를 들어,  class ratediscount(퍼센트 할인)와 class fixdiscount(고정 할인)이 discount(interface)를 implements하고 있습니다. 여기서 spring bean 의존관계 주입 시 discount 인터페이스만 의존하게 구현한다면,  서비스는 discount가 실질적으로 ratediscount인지, fixdiscount인지 알 수 없습니다. 이 상황에서 ratediscount과 fixdiscount 둘 다 @bean을 적용시킨다면, 스프링은 bean 생성 시 둘 중에 어떤 것을 선택해야 할지 모르기 때문에 충돌이 일어납니다. 그래서 bean을 생성하지 못하고 DependencyException을 터트립니다. 이것을 방지해주기 위해 둘 중에 하나를 선택해서 우선순위를 정해주어야 합니다. 

@Component
@Primary
public class RateDiscount implements Discount{
 .....
}

@Qualifier, 어노테이션 직접 등록 등... 다양한 방법이 있지만, 저는 이런 식으로 @Primary를 설정하여 bean등록 시 스프링이 우선순위를 알 수 있도록 수정해주었습니다. 이렇게 수정하고 보니 정상적으로 테스트 코드가 돌아가는 것을 확인할 수 있었습니다.

 

결론

빈 등록할 때 꼭 의존관계를 잘 파악하고 설계해야 한 다는 것을 배웠습니다. ㅠㅠ

반응형

댓글