@Qualifer(”mainDiscountPolicy”) 만 써서 이렇게 문자를 적으면 컴파일 시 체크가 안되서 남발하다가 뭐가 틀린지도 모를 수 있으니 어노테이션을 만들어서 컴파일 오류로 잡도록 유도하자!!
그래서 아래 코드처럼 어노테이션을 만들어서 컴파일 오류로 잡자!
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
        ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}
@Documented : 이 애노테이션이 javadoc 문서에 보이게 만들어줌 다른 개발자들이 API 문서만 보고도 "이 애너테이션이 붙어 있구나"를 알 수 있도록 하려고.
@Retention(RetentionPolicy.RUNTIME) : 이 애노테이션이 언제까지 살아있을지를 설정하는 것.
스프링, 자바 프레임워크들은 런타임에 리플렉션을 통해 애너테이션을 분석해 동작함
→ 그래서 커스텀 애너테이션을 만들 땐**RUNTIME으로 설정**해야 함.
거의 머 Qualifier가 주된 기능인데 컴파일 시에 잡으려고 어노테이션으로 쓰는 느낌.
근데, 애노테이션은 상속이란 개념 X . 이렇게 모아서 사용하는 기능은 스프링이 제공해 주는 것.