AR삽질러

Spring springBeen조회(8) 본문

JAVA/Spring

Spring springBeen조회(8)

아랑팡팡 2023. 7. 16. 11:48
728x90

빈 이름으로만 조회

public class ApplicationContextBasicFindTest {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

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

memberService 빈을 MemberService타입으로 조회해 MemberServiceImpl 클래스인지 조회한다.

 

빈 타입으로 조회

public class ApplicationContextBasicFindTest {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

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

memberService 빈을 조회해 MemberServiceImple 클래스인스턴스인지 조회한다.

 

빈 이름으로 조회 예외

@Test
@DisplayName("구체타입으로 조회")
void findBeanByName2(){
    MemberService memberService = ac.getBean("memberService", MemberServiceImpl.class);
    Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}

MemberService 빈을 MemberServiceImpl 클래스로 조회해 빈이 MemberServiceImpl클래스인스턴스인지 조회한다.

 

빈 이름으로 조회 예외2

@Test
    @DisplayName("빈 이름으로 조회 예외")
    void findBeanByNameError(){
        assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("Error", MemberService.class));
    }

존재하지 않는 빈의 이름으로 조회할시 예외가 발생하는지 확인하는 테스트로 Error라는 이름의 테스트빈을 가정해 MemberService타입으로 조회한결과 NoSuchBeanDefinitionException 예외가 발생하는지 확인해본다.

 

- AnnotationConfigApplicationContext : 스프링 어노테이션 기반 설정으로 애플리케이션 컨텍스르를 생성하는 클래스

- @Test : JUnit 테스트 메서드를 지정하는 어노테이션

- @DisplayName : 테스트 메서드의 이름을 지정하는 어노테이션

- @Bean : 스프링컨테이너에 빈을 등록하는 메서드를 지정하는 어노테이션

 

동일한 타입이 두개 이상일 경우

public class ApplicationContextSameBeanFindTest {

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);

    @Test
    @DisplayName("타입으로 조회시 같은 타입이 둘 이상이면 중복 오류가 발생한다.")
    void findBeanByTypeDuplicate(){
        assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(MemberRepository.class));
    }

동일한 타입의 빈이 두개 이상 등록되어 있을때 타입으로 빈을 조회하면 중복오류가 발생하는데 확인하는 테스트로 MemberRepository 타입으로 빈을 조회하였을때 NoUiqueBeanDefinitionException예외가 발생하는지 테스트한다.

assertThrowa() : 특정 예외가 발생하는지 검증하는 메서드로 첫번째 변수로 예상한 클래스를 전달하고 두번쨰 변수에 람다식으로 전달한다. 여기서는 NoUniqueBeanDefinitionException이 발생하는지를 검증한다.

 

타입으로 조회시 같은 타입이 둘 이상이면 빈 이름을 지정한다.

@Test
    @DisplayName("타입으로 조회시 같은 타입이 둘 이상이면 빈 이름을 지정한다.")
    void findBeanByName(){
        MemberRepository memberRepository = ac.getBean("memberRepository1", MemberRepository.class);
        assertThat(memberRepository).isInstanceOf(MemberRepository.class);
    }

동일한 타입의 빈이 두개 이상 등록되었을때 빈이름을 지정하여 조회하는 테스트로 해당 빈이 memberRepository1 로 MemberRepository 타입의 빈을 조회하여 MemberRepository 클래스의 인스턴스인지 검증한다.

 

특정타입을 모두 조회하기

@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("beanOfType = " + beansOfType);
        assertThat(beansOfType.size()).isEqualTo(2);
    }

 

 

해당 타입의 모든 빈을 조회하는 방법으로 MemberRepository타입의 모든 빈을 조회해서 조회된 빈들을 출력하고 마지막으로 빈의 갯수가 2개인지 검증한다.

728x90
반응형
LIST