문제 상황 : 인터페이스A가 있고 이를 구현한 여러 클래스가 존재할 때, 특정 클래스에서 인터페이스 A에 대해 의존성을 주입받고자 하는 상황이다.
해결 방법 : A를 구현한 클래스 중 한 클래스에 @Primary를 붙여준다. 이 어노테이션을 통해 여러 개의 클래스 중 우선적으로 이 클래스를 할당한다.
추가적으로, @Qualifier 어노테이션을 통해 주입할 클래스를 지정할 수 있다. 주의사항으로는 @RequiredArgsConstructor 어노테이션을 사용해 생성자 주입을 할 시에는 @Qualifier에 지정한 명과 변수명이 같아야 한다.
@RequiredArgsConstuctor
public class TestClass{
@Qualifier("hyundai") // 이 때 무조건 클래스명이랑 똑같이 써줘야 한다. 대신 첫 문자는 소문자
private final CarInterface hyundai;
}
만약 @Primary가 있는 클래스 외에 다른 클래스에 대해 @Qualifier를 붙이면 @Qualifier가 붙은 것으로 설정된다. 즉, @Primary보다 @Qualifier가 더 높은 우선 순위에 있다. 따라서 메인으로 사용되는 클래스에 @Primary를 붙인 후, 가끔 사용되는 클래스에는 @Qualifier로 접근하는 것이 가장 좋은 방법이다.
'Spring Boot > Spring Core' 카테고리의 다른 글
Spring Core Bean Lifesycle Methods (0) | 2024.07.21 |
---|---|
Spring Core Bean Scope (0) | 2024.07.21 |
Spring Core Bean Lazy Initialize (0) | 2024.07.21 |
Spring Core @SpringBootApplication (0) | 2024.07.20 |
Spring Core IOC(제어 역전) (0) | 2024.07.20 |