@SpringBootTest
public class BeanTest {
@Autowired
Food food;
}
@Autowired : Bean 타입으로 DI를 지원, Food 타입으로 Bean을 찾음 --> 오류 발생 --> Bean의 이름으로 찾음
@SpringBootTest
public class BeanTest {
@Autowired
Food pizza;
@Autowired
Food chicken;
}
등록된 Bean 이름을 명시해줌
즉, @Autowired가 기본적으로는 Bean Type(Food)으로 DI를 지원하며 연결이 되지않을 경우 Bean Name(pizza, chicken)으로 찾는 것을 확인
@Component
@Primary
public class Chicken implements Food {
@Override
public void eat() {
System.out.println("치킨을 먹습니다.");
}
}
@Component
@Qualifier("pizza")
public class Pizza implements Food {
@Override
public void eat() {
System.out.println("피자를 먹습니다.");
}
}
같은 타입의 Bean들에 Qualifier와 Primary가 동시에 적용되어 있다면 Qualifier의 우선순위가 더 높음 (Qualifier > Primary)
같은 타입의 Bean이 여러 개 있을 때는 범용적으로 사용되는 Bean 객체에는 Primary 사용
지엽적으로 사용되는 Bean 객체에는 Qualifier를 사용
즉, 좁은 범위의 설정이 우선 순위가 높음