• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

테스트 코드에서 ApplicationContext 의 구현체를 생성하면 스프링 컨테이너가 2개 생성되나요?

24.01.26 21:57 작성 조회수 97

0

안녕하세요 현재 강의를 세션 6까지를 수강하고 다시 한번 복습을 하고 있는 중입니다.
복습을 하면서 이해가 안되는 부분이 있어서 질문을 드리게 되었습니다.

@Configuration 을 설정하면 Spring에서 자동으로 그 클래스 안에 있는 @Bean 을 자동으로 스프링 컨테이너에 등록됬다고 알고 있습니다.
수업 중에 테스트코드에 ApplicationContext 를 스프링 컨테이너라고 소개를 하셨고, 그것을 구현을 하셨느데, 그럼 테스트코드를 실행을 하면 스프링 컨테이너가 2개가 생성이 되는 건인가요?

아니면 해당 클래스에서 생성된 bean을 가져오는 역할을 하는 것인가요?

@Autowired 에서 주입된 Bean이 어디에서 가져온 객체인지도 판별이 될 것 같아요

답변 1

답변을 작성해보세요.

1

안녕하세요. 안전한 날치님

어떤 테스트인지에 따라서 다를 것 같아요.

순수하게 테스트를 작성하고 ApplicationContext를 직접 생성한다면 직접 생성한 AppilcationContext가 바로 스프링 컨테이너이고, 스프링 컨테이너가 1개가 됩니다. 이 안에서 모든게 작동하는 것이지요.

예를 들어서 다음 코드에서 스프링 컨테이너는 1개입니다. 바로 AnnotationConfigApplicationContext 자체가 스프링 컨테이너 입니다.

 

class ApplicationContextBasicFindTest {

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

    @Test
    @DisplayName("빈 이름으로 조회")
    void findBeanByName() {
        MemberService memberService = ac.getBean("memberService", MemberService.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
    }

감사합니다.

스케치님의 프로필

스케치

질문자

2024.01.27

답변 감사합니다. 답변을 토대로 제가 결론을 아래와 같이 내렸는데, 혹시 검토해 부탁드립니다.

강의에 있는 hello.core 아래의 CoreApplication 을 실행시키면, 자동으로 스프링 컨테이너가 생성이 되어 빈을 설정하는데, 테스트 코드에서는 그러한 부분이 없어서 스프링 컨테이너를 수동으로 생성하였다고 이해를 하면 되는지 궁금합니다.

생각하신 내용이 맞습니다.

CoreApplication을 실행하면 스프링 부트가 내부에서 ApplicationContext를 자동으로 생성합니다.

감사합니다.