반응형
"모든 자바 객체 최상위 부모는 Object입니다."
일반적으로 흔히 사용하고 있는 자바 클래스들은 최상위 부모가 Object입니다.
public class ApplicationNameConfig extends Object { ... }
이런 식으로 extends Object가 생략되어 있습니다.
위의 그림 같이 상속관계를 맺고 있다고 생각하면, Spring Bean을 부모 타입으로 조회 시 자식 타입까지 다 조회됩니다. 관계도에서 1번의 Bean을 조회할 경우 1,2,3,4,5,6,7까지 모두 조회가 가능합니다.
이번에는 간단한 예제를 보면서 확인해보겠습니다.
@Configuration
static class TestConfig {
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
}
간단하게 테스트를 하기 위해 Bean을 생성해보았습니다. DIscountPolicy의 자식으로 rateDiscountPolicy()와 fixDiscountPolicy()를 가지고 있습니다.
여기서 주의해야할 점은 부모 타입으로 조회할 경우 자식이 둘 이상 가지고 있으면 중복 오류가 발생합니다.
public class ApplicationContextExtendsFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
@Test
@DisplayName("부모 타입으로 조회시, 자식이 둘 이상 있으면, 중복 오류가 발생한다")
void findBeanByParentTypeDuplicate() {
DiscountPolicy bean = ac.getBean(DiscountPolicy.class); //1
//assertThrows(NoUniqueBeanDefinitionException.class,
// () ->ac.getBean(DiscountPolicy.class) );
}
}
위에 코드로 작성 시 NoUniqueBeanDefinitionException이 발생됩니다.
이것을 방지하기위해 assertThrows에 NoUniqueBeanDefinitionException 오류가 생긴다고 인지 시켜주어야 합니다.
1번 주석을 지우고 테스트 결과 중복 Exception을 잘 넘겨주는 것을 확인할 수 있었습니다.
반응형
'혼자 공부하는 것들 > Spring' 카테고리의 다른 글
UnsatisfiedDependencyException 오류 해결! 😂 (3) | 2022.01.19 |
---|---|
의존관계 주입시 생성자 주입을 사용하자! 😲 (1) | 2022.01.17 |
스프링에서 싱글톤 적용 시 주의 할 점! ⚠️ (0) | 2022.01.15 |
BeanFactory과 ApplicationContext는 왜 사용해야할까? (0) | 2022.01.12 |
Spring 컨테이너에 등록된 bean 조회하기 테스트 코드[Juint5] (0) | 2022.01.09 |
댓글