Back-End/Spring
[Spring] 의존관계 자동 주입 - 애노테이션 직접 만들기
달의 조각
2022. 3. 21. 16:35
이 글은 김영한 님의 스프링 핵심 원리 - 기본편(https://inf.run/ZtdV)을 수강하며 정리한 글입니다.
@Qualifier("mainDiscountPolicy")
괄호 안의 문자는 컴파일 시 타입 체크가 안 돼서 오타가 발생해도 오류를 잡을 수 없는데,
애노테이션을 만들어서 문제를 해결할 수 있다.
📚 annotation
🍥 MainDiscountPolicy
애노테이션은 상속의 개념이 없다.
때문에 일반 @Qualifier처럼 사용할 수 있도록 @Qualifier에 붙은 애노테이션들을 가져와서 붙여 준다. (1 ~ 3줄)
단지 오타를 방지하기 위해 @Qualifier를 사용하는 것과 같은 하나의 애너테이션을 만든 것뿐이다.
Ctrl + B 단축키를 통해 사용되는 곳을 쉽게 알 수 있어서 편하다.
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}
@Component
@MainDiscountPolicy //오타가 나도 쉽게 알아챌 수 있다.
public class RateDiscountPolicy implements DiscountPolicy {}
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,@MainDiscountPolicy DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}