코드 그라데이션
스프링 빈 조회 (2) 상속 관계 본문
스프링 빈 조회 - 상속 관계
- 부모 타입으로 조회하면, 자식 타입도 함께 조회한다.
- 그래서 모든 자바 객체의 최고 부모인 `Object` 타입으로 조회하면, 모든 스프링 빈을 조회한다.
먼저
static 클래스 등록
// static 클래스 추가하여 빈 두 개 등록
@Configuration
static class TestConfig {
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
}
첫 번째 메서드
@Test
@DisplayName("부모 타입으로 조회시, 자식이 둘 이상 있으면, 중복 오류가 발생한다")
void findBeanByParentTypeDuplicate() {
// DiscountPolicy bean = ac.getBean(DiscountPolicy.class); => 둘 다 찾으려 함. 오류나옴.
// NoUniqueBeanDefinitionException
assertThrows(NoUniqueBeanDefinitionException.class,
() -> ac.getBean(DiscountPolicy.class));
}
두 번째 메서드
@Test
@DisplayName("부모 타입으로 조회시, 자식이 둘 이상 있으면, 빈 이름을 지정하면 된다")
void findBeanByParentTypeBeanName() {
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class);
}
세 번째 메서드
@Test
@DisplayName("특정 하위 타입으로 조회")
void findBeanBySubType() {
RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class); // 하나밖에 없으니까 바로 지정 가능.
assertThat(bean).isInstanceOf(RateDiscountPolicy.class);
}
네 번째 메서드
@Test
@DisplayName("부모 타입으로 모두 조회하기")
void findAllBeanByParentType() {
Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class); // Map으로 나온다는 것
assertThat(beansOfType.size()).isEqualTo(2); // expected라고 주석이 나옴. 두개니까.
// 공부용 출력문 - 개발상에서는 빼자.
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + " value=" + beansOfType.get(key));
}
}
출력 결과
다섯번째 메서드
@Test
@DisplayName("부모 타입으로 모두 조회하기 - Object")
void findAllBeanByObjectType() {
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + " value=" + beansOfType.get(key));
}
}
출력 결과
이렇게 엄청나게 많이 나옴
우리가 개발하면서 ApplicationContext에서 직접 게팅할 필요는 아예 없다. 또는 매우 드물다.
스프링 컨테이너가 자동으로 의존관계 주입하는 걸 쓰거나 @Bean 쓰는 등의 방법을 사용한다.
실제 개발할 때 ApplicationContext에서 빈을 조회할 일도 매우 드물다.
728x90
'Spring > 핵심 원리 구현' 카테고리의 다른 글
다양한 설정 형식 지원 - 자바 코드, XML (0) | 2024.01.23 |
---|---|
BeanFactory와 ApplicationContext (0) | 2024.01.23 |
스프링 빈 조회 (1) - 기본 / 동일한 타입이 둘 이상인 경우 (0) | 2024.01.22 |
컨테이너에 등록된 모든 빈 조회 (0) | 2024.01.21 |
스프링 컨테이너 생성 (0) | 2024.01.21 |
Comments