스프링

스프링 빈 조회하기

salmon16 2023. 7. 10. 21:49

스프링 컨테이너에서 스프링 빈을 조회하는 기본적인 방법

  • ac.getBean(빈이름, 타입)
  • ac.getBean(타입)

스프링 빈이 없으면 예외가 발생한다 NoSuchBeanDefinitionException

구체 타입으로도 조회할 수 있는데 유연성이 떨어진다.

 

빈이 존재하지 않을 때는 assertThrows에 NoSuchBeanDefinitionException.class 에러로 테스트 코드를 작성해야한다.

여기서의 Assertions은 junit의 Assertions을 사용한다.

동일한 타입이 둘 이상인 경우

이렇게 동일한 MemberRepository에 대해 타입이 두개인 경우 NoUniqueBeanDefinitionException이 발생한다.

이 경우에는 빈 이름을 지정하면 해결이 된다.

특정 타입을 모두 조회하기

특정 타입빈을 모두 조회하려면 getBeansOfType함수를 사용하면 된다.

getBeansOfType함수의 return 값은  Map<string(빈 메서드 이름), 타입>으로 반환된다.

@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.size()).isEqualTo(2);
}

 

 

부모 타입으로 빈 조회

부모 타입으로 조회하면 자식 타입도 함께 조회된다.

모든 자바 객체의 최고 부모인 Object타입으로 조회하면 모든 스프링 빈을 조회한다.

출처 : 인프런 스프링 핵심 원리 - 기본 편  김영한