Spring Basic - 애노테이션 만들기

mmm·2023년 3월 27일

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

→ 이렇게 문자를 적으면 컴파일 시 타입체크가 불가능하므로, 애노테이션을 직접 만들어 문제 해결

  • MainDiscountPolicy 애노테이션
@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 뿐 아니라 다른 애노테이션들과 조합하여 사용할 수 있도록 지원한다.

스프링이 제공하는 기능을 분명한 목적없이 재정의 하는 것은 오히려 혼란을 줄 수 있다.

profile
mmm

0개의 댓글