1. 조회 대상 빈이 2개 이상일 때 해결방법
@Autowired 필드 명 매칭
@Quilifier -> @Quilifier 끼리 매칭 -> 빈 이름 매칭
@Primary 사용
@Autowired 필드 명 매칭
@Autowired 가 여러 개일 때 구체 클래스의 명으로 변경해서 사용합니다.
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = rateDiscountPolicy;
}
@Quilifier
추가 구분자를 제공, 주입시 빈 이름을 변경하는 것이 아니라, 추가적으로 구분자를 제공해 줍니다.
@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy {
}
@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {
}
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
@Primary
primary로 어노테이션으로 설정된 것을 가져옵니다.
@Component
@Primary
public class RateDiscountPolicy implements DiscountPolicy{
}
2. 애노테이션 직접 만들기
@Quilifier("...") 는 문자이기 때문에 컴파일시 타입체크가 안되기 때문에 애노테이션을 만들어서 해결할 수 있습니다.
quilifier 클래스 탐색해 가져와서 MainDiscountPolicy 애노테이션을 생성해 줍니다.
package hello.core.annotation;
import org.springframework.beans.factory.annotation.Qualifier;
import java.lang.annotation.*;
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}
@Quilifier로 설정할 곳에서 설정해줍니다.
@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy {
}
@Quilifier를 사용할 곳에서 @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;
}
}
'JAVA' 카테고리의 다른 글
[SPRING] Bean 스코프란 (0) | 2023.06.20 |
---|---|
[SPRING] DI시 중복 Bean을 다 사용 하고 싶을 때 해결 방법 (0) | 2023.06.19 |
[SPRING] 의존관계 주입 DI (0) | 2023.06.19 |
싱글톤 패턴 (0) | 2023.06.17 |
[SPRING] 스프링 컨테이너에 등록 된 Bean 출력하기 (0) | 2023.06.16 |