반응형
@Qualifier를 이용하다보면 오탈자가 날 수 있다.
오류는 나는데 오타 때문에 난 오류인 것은 알 수 없어서 찾기 힘들다.
ex: @Qualifier("mainDiscountPolicy") 를 사용해야하는데,
@Qualifier("mainDiscountPolicyy")으로 오타낸 경우
이때 어노테이션을 직접 생성하면 해결할 수 있는데
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {}
interface를 생성해서 @Qualifier로 지정하면 된다.
@Qualifier 뿐만 아니라 다른 어노테이션을 추가하는 것도 가능하다.
하지만 어노테이션 생성을 너무 남발하다 보면 유지관리가 까다롭다.
생성한 어노테이션 사용 예제
RateDiscountPolicy.java - 주입될 bean에 어노테이션 추가
@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy{
private int discountPercent = 10;
@Override
public int discount(Member member, int price) {
if(member.getGrade() == Grade.VIP) {
return price * discountPercent/100;
} else { return 0; }
}
}
OrderServiceImpl.java - 생성자에 어노테이션 추가
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
// @RequiredArgsConstructor 통해서 자동 생성 가능
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy
DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
}
본 글은 김영한님의 유료 강의를 들으며 요약, 정리를 목적으로 작성한 것으로 홍보나 금전적 목적이 없습니다.
제 방식으로 정리한 것으로 강의 내용을 추가/삭제/변경된 부분이 많으며 자세한 설명은 강의 구매를 추천 드립니다.
참고: inflearn / 김영한 / 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
반응형
'Develop > Spring+JPA' 카테고리의 다른 글
[Spring] Interceptor (0) | 2021.01.29 |
---|---|
[Spring Boot] Request method 'DELETE' not supported (2) | 2021.01.20 |
[Spring] <context:component-scan>에 대해 (0) | 2021.01.07 |
IoC, DI, Container 개념 (0) | 2020.12.29 |
Java Spring 기초 개념 (0) | 2020.12.29 |