@Qualifier의 경우 아래 코드와 같이 (”name”)을 붙여주어야 한다.
문자에 오타가 있어도 돌아감@Component
@Qualifier("mainDiscountPolicy")
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;
}
}
}
→ 이렇게 문자를 적으면 컴파일 시 타입체크가 불가능하므로, 애노테이션을 직접 만들어 문제 해결
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}
문자에 오타가 있을 경우 에러 발생@Component
@MainDiscountPolicy
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;
}
}
}
애노테이션에는 ‘상속’ 이라는 개념이 없다.
스프링은 @Qulifier 뿐 아니라 다른 애노테이션들과 조합하여 사용할 수 있도록 지원한다.
스프링이 제공하는 기능을 분명한 목적없이 재정의 하는 것은 오히려 혼란을 줄 수 있다.