Today I Learned_220705
Spring Framework
Bean
빈 조회 시, 부모 타입으로 조회하면 자식 타입도 함께 조회된다.
[예시]
상속 관계가 아래와 같을 때
@Configuration
static class TestConfig{
//상위 타입으로 선언하는 이유 : 개발하거나 설계를 할 때 역할과 구현을 쪼개는 것이라고 보면 됨
//얘는 DiscountPolicy라고 판별
//다른데서도 의존성 주입하기 편함
@Bean
public DiscountPolicy rateDisCountPolicy(){
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy(){
return new FixDiscountPolicy();
}
}
부모 타입으로 조회 시, 두 개의 자식들이 조회되며, NoUniqueBeanDefinitionException이 발생한다.
void findBeanByParentTypeDuplicate(){
DiscountPolicy bean = ac.getBean(DiscountPolicy.class);
assertThrows(NoUniqueBeanDefinitionException.class,
() -> ac.getBean(DiscountPolicy.class));
}
아래와 같이 Bean의 이름을 가지고 조회하거나
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
부모 타입으로 모두 조회한 다음, 내부에서 조회해야 한다.
Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class);
자동 의존관계 주입을 할 때 이 내용들을 알아두어야 함!