Spring/스프링 핵심 원리 - 기본편

[의존 관계 자동 주입] @Qualifer 타입 체크 문제 해결하기 - 애노테이션 직접 생성

alsruds 2023. 12. 25. 01:34
🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

🚨문제 상황🚨

☑️ @Qualifier 사용 시 컴파일 과정에서 타입 체크 안됨

 

💡해결 방법💡

✅ 애노테이션 직접 생성 후 주입하기

 

1. Annotation 생성

· main/java/hello.core/annotation/MainDiscountPolicy

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
        ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {}

 

 

2. 생성한 애노테이션을 코드에 추가

· RateDiscountPolicy

@Component
@MainDiscountPolicy // <---
public class RateDiscountPolicy implements DiscountPolicy{...}

 

· OrderServiceImpl

@Component
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

    ...
}