스프링/1. 스프링 핵심 원리

38강. 어노테이션 만들기

sdafdq 2023. 7. 22. 21:43

@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;
        }

    }
}