일단 걍 부모 조회시 자식들 다 끌려나옴.
그래서 Object타입으로 조회 시 모든 Bean 다 끌려나옴.
public class ApplicationContextExtendsFindTest {
ApplicationContext ac = new AnnotationConfigApplicationContext(ExtendsConfig.class);
@Test
@DisplayName("부모타입 조회시 자식 여러개면 오류")
public void findBeanByParentTypeDuplicate(){
ac.getBean(DiscountPolicy.class);
}
@Configuration
static class ExtendsConfig{
@Bean
public DiscountPolicy rateDiscountPolicy(){
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy(){
return new FixDiscountPolicy();
}
}
}
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.example.core.discount.DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,fixDiscountPolicy
@Test
@DisplayName("부모타입 조회시 자식 여러개면 오류")
public void findBeanByParentTypeDuplicate(){
Assertions.assertThrows(NoUniqueBeanDefinitionException.class, ()->ac.getBean(DiscountPolicy.class));
}
@Test
@DisplayName("이것도 그냥 이름으로 조회하면 됨.")
public void findBeanByName(){
DiscountPolicy discountPolicy = ac.getBean("rateDiscountPolicy",DiscountPolicy.class);
assertThat(discountPolicy).isInstanceOf(RateDiscountPolicy.class);
}
사실 print 해보는 건 별로 좋은 방법이 아니라고 함. 왜냐하면 수많은 테스트를 일일히 눈으로 볼 순 없기 때문. 그냥 Assertions 저거 이용해서 제대로 테스트 케이스 만들면 됨.
'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글
25강. XML로 스프링 (0) | 2023.07.17 |
---|---|
24강. 빈 컨테이너 구조 (0) | 2023.07.17 |
22강. 빈 조회 시 동일한 타입이 둘 이상일 경우 (0) | 2023.07.17 |
21강. 빈 조회 (0) | 2023.07.17 |
20강. 빈 확인 (0) | 2023.07.17 |