같은 타입의 Bean이 2개라면?

금은체리·2023년 11월 15일
1

Spring

목록 보기
9/49

같은 타입 Bean 등록

  • Food food; 필드에 @Autowired를 사용하여 Bean 객체 주입 시도
  • 주입 할 수 없다는 오류 발생
  • food 필드에 Bean을 주입해줘야하는데 같은 타입의 Bean 객체가 하나 이상이기 때문에 어떤 Bean을 등록해줘야할지 몰라 오류 발생

해결방법

1. 등록된 Bean 이름 명시하기

2. @Primary 사용하기

  • @Primary가 추가되면 같은 타입의 Bean이 여러 개 있더라도 @Primary가 설정된 객체를 주입해줌
@Test
    @DisplayName("테스트")
    void test1() {
        food.eat();
    }
  • 테스트 결과

3. Qualifier 사용하기

  • Pizza 클래스에 @Qulifier("Pizza") 추가
  • 주입하고자 하는 필드에도 @Qualifier("pizza")를 추가하면 해당 Bean 객체 주입됨
  • 테스트 결과

@Primary vs @Qualifier

  • 같은 타입의 Bean들에 Qualifier와 Primary가 동시에 적용되어있다면 Qualifier의 우선순위가 더 높음
  • 하지만 Qualifier는 적용하기 위해서 주입 받고자 하는 곳에 해당 Qualifier를 반드시 추가 해줘야함
  • 따라서 같은 타입의 Bean이 여러 개 있을 때는 범용적으로 사용되는 Bean 객체에는 Primary를 설정하고 지엽적으로 사용되는 Bean 객체에는 Qualifier를 사용하는 것이 좋다❗️
    • ex) 치킨 95% ➡️ @Primary
    • ex) 피자 5% ➡️ @Qualifier

👀 Spring은 좁은 범위의 설정이 우선 순위가 더 높음

profile
전 체리 알러지가 있어요!

0개의 댓글