Unique Bean 오류 해결

강한친구·2022년 4월 11일
0

Spring

목록 보기
3/27

조회 대상 빈이 2개 이상일 때

Autowired 필드 명 매칭

autowired는 처음에 타입 매칭을 시도하고, 이 때 빈이 여러 개 있다면 필드 이름, 파라미터 이름으로 빈을 추가 매칭한다.

따라서 이름을 바꿔서 구분해주면 해결된다.

    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = rateDiscountPolicy;
    }

Qualifier 추가

@Qualifier를 통해서 구분을 해준다.
클래스빈에 특별한 이름을 부여해주고 인수에 넣어주면 이름에 맞는 빈을 넣어준다.

    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

만약 같은 이름의 qualifier를 못찾으면 같은 이름을 가진 스프링 빈을 찾아서 쓰려고한다. 따라서 퀄리파이어 이름은 이 용도로만 명확하게 사용해야한다.

Primary 걸기

자주 쓰는거에 Primary를 걸어주면 그걸 우선적으로 사용한다.

뭘 써야 하는가

주로 Primary를 메인으로 쓰는것에 걸어두고, 나머지에는 Qualifier를 걸어둔다.

0개의 댓글