스프링 컨테이너에서 스프링 빈을 조회하는 기본적인 방법
- 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타입으로 조회하면 모든 스프링 빈을 조회한다.
출처 : 인프런 스프링 핵심 원리 - 기본 편 김영한
'스프링' 카테고리의 다른 글
싱글톤 패턴, 싱글톤 컨테이너 (0) | 2023.07.11 |
---|---|
XML로 스프링 컨테이너 설정 정보 사용하기 (0) | 2023.07.10 |
스프링 컨테이너 생성 과정 (0) | 2023.07.10 |
AppConfig에서 스프링으로 전환하기 (0) | 2023.07.10 |
AppConfig (0) | 2023.07.06 |