Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

@Qualifier, 타입체크, annotaion만들기 본문

인프런/[인프런] Spring 핵심원리 이해

@Qualifier, 타입체크, annotaion만들기

Seung__ 2021. 7. 30. 15:46
  • 흠 근데 @Qualifier를 그냥 사용하면 문제가 있음
  • @Qualifier("mainDiscountPolicy")라고 지정했다 해보자.
  • 타입 체크 어떻게함??????????
  • annotaion을 만들어서 해결할 수 있음.

 

 

1. annotaion 생성


  • 우리가 만든 annotaion에 @Qualifier를 적용해 주자.
  • 즉, 우리가 만든 annotaion을 사용하면 @Qualifier가 매칭이 된다.
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}

 

 

 

2. main으로 지정할 구현체에 @MainDiscountPolicy


  • @MainDiscountPolicy를 적용하면 @Qualifier를 적용한 효과가 있다.
@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy{

 

 

3. 가져다 쓰는 곳에 적용


  • 마찬가지로 사용하는 곳에 붙이면 @Qualifier가 일치하는 빈을 찾아올 수 있다.
    @Component
    //@RequiredArgsConstructor //final 붙은 필드를 받는 생성자를 만듦
    public class OrderServiceImpl implements OrderService{
    
        private final MemberRepository memberRepository;
    
    
        private final DiscountPolicy discountPolicy; //이렇게하면 인터페이스에만 의존함.
    //private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
    
        @Autowired
        public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) {
            this.memberRepository = memberRepository;
            this.discountPolicy = discountPolicy;
        }​

 

4. 정리


  • annotaion에는 상속 개념이 없음
  • 여러 annotaion을 모아서 사용하는거는 스프링에서 지원해주는것.

 

5. GitHub : 210730 @Qualifier + annotaion


 

GitHub - bsh6463/SpringCoreFunction

Contribute to bsh6463/SpringCoreFunction development by creating an account on GitHub.

github.com

 

 

Comments