작성
·
225
1
안녕하세요.
강의 목차 중 "애노테이션 직접 만들기" 에서 @Qualifier를 포함하는 애노테이션을 아래와 같이 직접 생성하고,
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}
해당 커스텀 어노테이션을 생성자 주입 방식으로 사용하는 예제를 보여 주셨는데요.
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
...
}
시험삼아 아래와 같이 @RequiredArgsConstructor를 사용했더니
NoUniqueBeanDefinitionException이 발생합니다.
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
//@Qualifier("mainDiscountPolicy")
@MainDiscountPolicy
private final DiscountPolicy discountPolicy;
OrderServiceImpl의 .class 파일을 열어보니
생성자에 해당 어노테이션이 적용되지 않은 것을 확인할 수 있었습니다.
@RequiredArgsConstructor과 @Qualifier질문
위 질문에 대한 답변을 참고하여 lombok.config 설정을 해 주고,
위 코드에서 주석한 @Qualifier("mainDiscountPolicy") 를 사용해서 테스트를 돌렸을 때는 문제 없이 작동을 했는데요.
@RequiredArgsConstructor를 사용하는 경우에는 커스텀 어노테이션을 사용할 수 없는 것인지 궁금합니다.
와 컴파일 잘 되네요!!