반응형
인프런 강의를 듣는 도 중 테스트 코드를 작성하고 테스트를 돌리자마자
이러한 에러를 발생했습니다. ㅠㅠ 한 시간 동안 삽질을 해보면서 깨달음을 얻었습니다. 저 상황은 빈을 생성할 시 해당 빈이 충돌 난 것입니다.
예를 들어, 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등록 시 스프링이 우선순위를 알 수 있도록 수정해주었습니다. 이렇게 수정하고 보니 정상적으로 테스트 코드가 돌아가는 것을 확인할 수 있었습니다.
결론
빈 등록할 때 꼭 의존관계를 잘 파악하고 설계해야 한 다는 것을 배웠습니다. ㅠㅠ
반응형
'혼자 공부하는 것들 > Spring' 카테고리의 다른 글
Bean의 생명주기 콜백 🌱 (0) | 2022.01.25 |
---|---|
Bean 자동 주입 VS 수동 주입 어떤 걸 사용해야할까? 🌱 (0) | 2022.01.20 |
의존관계 주입시 생성자 주입을 사용하자! 😲 (1) | 2022.01.17 |
스프링에서 싱글톤 적용 시 주의 할 점! ⚠️ (0) | 2022.01.15 |
BeanFactory과 ApplicationContext는 왜 사용해야할까? (0) | 2022.01.12 |
댓글