Post

[Lecture - 김영한님(스프링 핵심 원리 - 기본편)] 어노테이션 직접 만들기

inflearn에서 김영한님 강의를 들으면서 내용을 정리해보자.
스프링 핵심 원리 - 기본편


어노테이션 직접 만들기

Qualifier("mainDiscountPolicy")처럼 문자를 적으면 컴파일시 타입 체크가 안된다.
따라서 아래 코드처럼 어노테이션을 만들어서 문제를 해결할 수 있다.

1
2
3
4
5
6
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy { }
1
2
3
@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy { }
1
2
3
4
5
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) {
    this.memberRepository = memberRepository;
    this.discountPolicy = discountPolicy;
}

어노테이션에는 상속이라는 개념이 없다.
이렇게 여러 어노테이션을 모아서 사용하는 기능은 스프링이 지원해주는 기능이다.
@Qualifier 뿐만 아니라 다른 어노테이션들도 같이 조합해서 사용할 수 있다.
단적으로 @Autowired도 재정의 할 수 있다.
물론 스프링이 제공하는 기능을 뚜렷한 목적없이 무분별하게 재정의하는 것은 유지보수에 더 혼란을 준다.

This post is licensed under CC BY 4.0 by the author.

© Yn3. Some rights reserved.