• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

질문있습니다!

21.02.09 16:04 작성 조회수 198

0

안녕하세요. 강의 듣다 궁금한 것이 있어 질문 드립니다.

입문자라 기본적인 것도 많이 모릅니다. ㅠ

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

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

  ......

    @Configuration
    static class TestConfig {
        @Bean
        public DiscountPolicy rateDiscountPolicy() {
            return new RateDiscountPolicy();
        }

        @Bean
        public DiscountPolicy fixDiscountPolicy() {
            return new FixDiscountPolicy();
        }
    }
}

이 테스트 클래스에서는 테스트용(?) 클래스?? 만들때 @Configuration 을 사용했는데

아래 테스트 클래스에서도 테스트용 클래스를 만드는데 @Configuration을 사용하지 않아서 궁금합니다.

class StatefulServiceTest {

    @Test
    void statefulServiceSingleton() {
        ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
        StatefulService statefulService1 = ac.getBean(StatefulService.class);
        StatefulService statefulService2 = ac.getBean(StatefulService.class);

        //ThreadA: A사용자 10000원 주문
        int userAprice = statefulService1.order("userA", 10000);
        //ThreadB: B사용자 20000원 주문
        int userBprice = statefulService2.order("userB", 20000);

        //ThreadA: 사용자A 주문 금액 조회
//        int price = statefulService1.getPrice();
        System.out.println("price = " + userAprice);

//        Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000);
    }

    static class TestConfig {
        @Bean
        public StatefulService statefulService() {
            return new StatefulService();
        }
    }
}

좋은강의 감사합니다. 열심히 배우고 있습니다!!

답변 1

답변을 작성해보세요.

2

안녕하세요. 윤제리님

그렇네요! 원칙적으로 @Configuration을 사용하는 것이 맞습니다.

넣지 않아도 스프링 빈으로 등록하는데는 문제가 없지만, 연관관계를 설정할 때 문제가 될 수 있습니다. 관련해서 섹션5. @Configuration과 싱글톤을 참고해주세요^^!