[스프링] bean이 여러개일 경우

구동현·2024년 1월 24일

스프링

목록 보기
14/21
post-thumbnail

코드 설명

public interface Food {
    void eat();
}

위 인터페이스를

@Component
public class Chicken implements Food {
    @Override
    public void eat() {
        System.out.println("치킨을 먹습니다.");
    }
}
@Component
public class Pizza implements Food {
    @Override
    public void eat() {
        System.out.println("피자를 먹습니다.");
    }
}

두 클래스에 implement 시켜주었다.

testCode

bean 여러개 생성 오류

@SpringBootTest
public class BeanTest {
    @Autowired
    Food food;

    @Test
    @DisplayName("test")
    void test1(){
        food.eat();

    }
}
  • Autowiered한 Food에서 오류가 났다.
  • food를 주입받은 chicken과 pizza 두개라서 오류가 난것.

1. bean이름으로 변수 선언

@SpringBootTest
public class BeanTest {

    @Autowired
    Food pizza;

    @Autowired
    Food chicken;

    @Test
    @DisplayName("test")
    void test1(){
        pizza.eat();
    }
    
}

전 게시글에서 설명했듯, Class명의 소문자로 바꾼 변수 명으로, bean이 저장된다.
그 빈을 호출한것..

2. primary annotation

@Component
@Primary
public class Chicken implements Food {
    @Override
    public void eat() {
        System.out.println("치킨을 먹습니다.");
    }
}

primary 어노테이션을 선언해줄 경우,chicken이 우선적으로 사용된다.

3. qualifier annotation

@Component
@Qualifier("pizza")
public class Pizza implements Food {
    @Override
    public void eat() {
        System.out.println("피자를 먹습니다.");
    }
}
    @Autowired
    @Qualifier("pizza")
    Food food;

qualifier로 명시할떄도 가능하다.

profile
개발합시다

0개의 댓글