@Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다. 이렇게 될 경우 mainDisccountPolicy처럼 오타가 나도 해당하는 코드가 문제가 발생했는지 모르고 진행될 경우가 발생한다.
애노테이션을 직접 만들어서 변경을 해주자.
1) MainDiscountPolicy를 만들자
- 애노테이션은 상속이라는 개념이 없다. 이렇게 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원해 주는 것이다.
package hello.core.annotation;
import org.springframework.beans.factory.annotation.Qualifier;
import java.lang.annotation.*;
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier("mainDiscountPolicy") // 해당하는 애노테이션을 지정해준다.
public @interface MainDiscountPolicy {
}
2) 주입되는 Qulifier를 수정해 주자.
- Stirng이 아닌 애노테이션으로 변경으로 해당코드에 오타가 발생돼 시 바로 예측할 수 있다.
- 우리는 이제 빈이 충돌 났을때 위와 같이 @MainDiscountPlicy 애노테이션을 통해서 맞춰줄 수 있다.
변경 전
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
변경 후
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@MainDiscountPolicy DiscountPolicy discountPolicy)) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
결론
위와 같이 번거롭게 변경을 왜 해줘야 되는지 처음에는 와닿지 안았다.
하지만 Stirng자체가 컴파일시 오류를 찾아내기 너무 힘들기 때문에 번거롭더라도 위와 같이 애노테이션을 만들어서 사용하는걸 적극 권장한다.
하지만 무엇보다 중요한것 적절한 위치에 @Qualifier와 @Primary를 사용하는 게 제일 좋다.!
이 글은 인프런의
제목 : 스프링 핵심 원리 - 기본편
강사 : 김영한 님의 동영상을 참조해 만들었습니다.
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
빈 생명주기 콜백 (0) | 2022.03.18 |
---|---|
의존관계 자동 주입 - 자동, 수동의 올바른 실무 운영 기준 (0) | 2022.03.18 |
의존관계 자동 주입 - 조회 빈 이 2개 이상으로 충돌이 났을때 (0) | 2022.03.18 |
의존관계 자동 주입 - 생성자 주입을 선택해라! & 롬복과 최신 트랜드 (0) | 2022.03.17 |
컴포넌트 스캔 - 컴포넌트 스캔과 의존관계 자동 주입 시작하기 (0) | 2022.03.17 |