@Qualifier("mainDiscountPolicy") 문제가 이런 문자열은 컴파일 시 타입체크가 안됨.
어노테이션 딱 만들어 두면 명확함
package com.example.core.annotation;
public @interface MainDiscountPolicy {
}
new 자바클래스 하면 annotation 선택할 수 있다. 아니면 저런 식으로 자바 클래스에다 쓰면 된다.
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}
ctrl + E 누르면 클래스나 파일 검색할 수 있는데 거기에서 @Quali에서 가져오고 @Qualifier 추가 시켜줌.
여기 후 이제 똑같음
@Component
//@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
@MainDiscountPolicy
@Component
public class RateDiscountPolicy implements DiscountPolicy{
private int discountPercent = 10;
@Override
public int discount(Member member, int price) {
if(member.getGrade() == Grade.VIP){
return price * discountPercent / 100;
}else{
return 0;
}
}
}
'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글
40강. 자동, 수동 선택 기준 (0) | 2023.07.23 |
---|---|
39강. 모든 빈 조회 (0) | 2023.07.22 |
37강. 자동주입 똑같은 빈이 2개 이상일 시 (0) | 2023.07.22 |
36강. 롬복, 최신 트렌드 (0) | 2023.07.22 |
35강. 생성자 주입을 사용하라. (0) | 2023.07.22 |