스프링/1. 스프링 핵심 원리

23강. 빈 조회 시 빈들이 상속관계에 있다면?

sdafdq 2023. 7. 17. 23:05

일단 걍 부모 조회시 자식들 다 끌려나옴.

그래서 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