본문 바로가기
Develop/Spring+JPA

@Qualitifier 편리하게 이용하기

by 연로그 2020. 12. 29.
반응형

@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 접근 기술

inf.run/XkpK

 

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Java Spring MVC Spring Boot 온라인

www.inflearn.com

 

반응형

'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