@Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다.
다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다.
@Target({ElementType.FIELD,
ElementType.METHOD,
ElementType.PARAMETER,
ElementType.TYPE,
ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documented@Qualifier("mainDiscountPolicy")// @MainDiscountPolicy을 사용하면 위에 해당하는 어노테이션이 다 실행된다.public@interface MainDiscountPolicy {
}
인터페이스 - DiscountPolicy
구현체 - RateDiscountPolicy , FixDiscountPolicy
이 중 RateDiscountPolicy를 MainDiscountPolicy라고 지정할려고 한다.
Annotation 직접 만들기
@Qualifier에 대해
의존성 주입 애노테이션
@Autowired 스프링 프레임워크에서 제공하는 애노테이션이다. @Autowired는 타입 매칭을 시도 하고 , 여러 빈이 있으면 필드 이름(파라미터 이름)으로 빈 이름을 추가 매칭한다. ac.getBean(클래스.class)
write-read.tistory.com
@Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다.
다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다.
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("mainDiscountPolicy") // @MainDiscountPolicy을 사용하면 위에 해당하는 어노테이션이 다 실행된다. public @interface MainDiscountPolicy { }
인터페이스 - DiscountPolicy
구현체 - RateDiscountPolicy , FixDiscountPolicy
이 중 RateDiscountPolicy를 MainDiscountPolicy라고 지정할려고 한다.
OrderServiceImpl
public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } }
RateDiscountPolicy
@Component @MainDiscountPolicy public class RateDiscountPolicy implements DiscountPolicy{ ... }
+
출처
스프링 핵심 원리 - 기본편 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온
www.inflearn.com
'기록 > Spring' 카테고리의 다른 글