@Component
@Qualifier("MainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {}
위 예시 처럼 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일시 타입 체크가 안된다.
다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다.
# 애노테이션 생성
@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 {}
애노테이션을 만들어서 클레스에 적용할 경우
- 컴파일 에러로 오타 확인이 가능하다
- 코드 추적이 가능하다. (어디서 사용하고 있는지)
애노테이션에는 상속이라는 개념이 없다. 이렇게 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원해주는 기능이다.
@Qulifier 뿐만 아니라 다른 애노테이션들도 함께 조합해서 사용할 수 있다.
단적으로 @Autowired도 재정의 할 수 있다. 물론 스프링이 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하는 것은 유지보수에 더 혼란만 가중할 수 있다.
'프로그래밍 > Spring' 카테고리의 다른 글
빈(Bean) 자동, 수동의 올바른 실무 운영 기준 (feat. 김영한 강사님) (0) | 2022.06.15 |
---|---|
동적으로 빈을 선택해야 할 때(조회한 빈이 모두 필요할 때(다형성) - List, Map) ★★★★ (0) | 2022.06.15 |
조회 대상 빈이 2개 이상인 경우 (@Primary, @Qualifier) (0) | 2022.06.13 |
생성자 주입을 사용하는 이유 (+ 최신 트렌드 feat. 스프링 핵심 원리 - 기본편) (0) | 2022.06.12 |
Filter (0) | 2022.06.11 |