티스토리 뷰

반응형
import java.util.Map;

public class ApplicationContextExtendsFindTest {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConfigTest.class);

    @Test
    @DisplayName("부모타입으로 조회 시,자식이 둘 이상 있으면 중복오류가 발생한다.")
    void findBeanType() {
        Assertions.assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class));
    }

    @Test
    @DisplayName("둘 이상의 자식이 있는 경우, 빈 이름을 지정하면 된다.")
    void findBeanParentTypeBeanName() {
        DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
        org.assertj.core.api.Assertions.assertThat(rateDiscountPolicy).isInstanceOf(DiscountPolicy.class);
    }

    @Test
    @DisplayName("둘 이상의 자식이 있는 경우, 빈 클래스를 직접 지정하면 된다.")
    void findBeanParentSubType() {
        DiscountPolicy fixDiscountPolicy = ac.getBean(FixDiscountPolicy.class);
        org.assertj.core.api.Assertions.assertThat(fixDiscountPolicy).isInstanceOf(FixDiscountPolicy.class);
    }

    @Test
    @DisplayName("부모를 상속받은 모든 자식들을 조회한다.")
    void findAllBeanParentType(){
        Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class);
        for (String key : beansOfType.keySet()) {
            System.out.println("key = " + key + " value=>" + beansOfType.get(key));
        }
    }
	
    // 모든 객체는 Ojbect를 최상위 보모로 갖고있기 때문에
    // Object로 조회 시 
    // @Configuration으로 설정한 @Bean객체들 뿐만아니라
    // 스프링에서 자동으로 설정해준 객체들까지 모두 나온다
    @Test
    @DisplayName("부모를 상속받은 모든 자식들을 조회한다.")
    void findAllBeanObject(){
        Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
        for (String key : beansOfType.keySet()) {
            System.out.println("key = " + key + " value=>" + beansOfType.get(key));
        }
    }

    @Configuration
    static class ConfigTest{
        @Bean
        public DiscountPolicy fixDiscountPolicy() {
            return new FixDiscountPolicy();
        }

        @Bean
        public DiscountPolicy rateDiscountPolicy() {
            return new RateDiscountPolicy();
        }
    }

}



반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함