근데 모든 빈을 출력하진 않겠죠~~?

-ac.getBeansOfType() : 매개변수의 모든 빈을 조회. 중복 허용

아래 코드와 같이 매개변수의 이름으로 조회할건지 타입으로 조회할건지 정할 수 있음.

@Test 코드에서 비교는 Assertions.asserThat으로 하는거 잊지 마라잉~

@Test
    @DisplayName("빈 이름으로 조회")
    void findBeanByName(){
        MemberService memberService = ac.getBean("memberService", MemberService.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
    }

    @Test
    @DisplayName("이름 없이 타입으로 조회")
    void findBeanByType(){
        MemberService memberService = ac.getBean( MemberService.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
    }
    
    @Test
    @DisplayName("구체 타입으로 조회")
    void findBeanByType2(){
        MemberServiceImpl memberService = ac.getBean( MemberServiceImpl.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
    }
    
    @Test
    @DisplayName("빈 이름으로 조회X, 실패 케이스")
    void findBeanByType3(){
        // 아래의 에러가 터져야 통과하는 assert문
        assertThrows(NoSuchBeanDefinitionException.class,
                () -> {ac.getBean( "xxxx",  MemberServiceImpl.class);});
    }
    
    //타입으로 조회시 같은 타입이 둘 이상 있으면 이름으로 조회하자! 빈 이름은
    // 중복으로 절대 구현 안하니!
    
    @Test
    @DisplayName("특정 타입을 모두 조회하기")
    void findAllBeanByType(){
        Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class);
        for(String key : beansOfType.keySet()){
            System.out.println("key: " + key + ", value: " + beansOfType.get(key));
        }
        System.out.println("beansOfType = " + beansOfType);
        assertThat(beansOfType).hasSize(2); // 해당 타입의 빈이 두개인가~
    }

스프링 빈 조회 - 상속관계

대원칙. 부모타입으로 조회하면 자식타입은 다 끌려나온다!!!!