• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

강의 프로토타입 질문입니다

24.01.01 17:42 작성 조회수 80

0


public class SingletonTest {

    @Test
    void singletonBeanFind() {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class);

        SingletonBean singletonBean1 = ac.getBean(SingletonBean.class);
        SingletonBean singletonBean2 = ac.getBean(SingletonBean.class);
        System.out.println("singletonBean1 = " + singletonBean1);
        System.out.println("singletonBean2 = " + singletonBean2);
        Assertions.assertThat(singletonBean1).isSameAs(singletonBean2);

        ac.close();
    }

    @Scope("singleton")
    static class SingletonBean {
        @PostConstruct
        public void init() {
            System.out.println("SingletonBean.init");
        }

        @PreDestroy
        public void destroy() {
            System.out.println("SingletonBean.destroy");
        }
    }
}

 

영한님이 AnnotationConfigApplicationContext(SingletonBean.class); 여기에 SingletonBean.class를 넣으면 componentscan이 된다고하셨는데 AnnotationConfigApplicationContext는 @Component 혹은 @Bean으로 등록이 되어있는걸 스프링컨테이너로 만들어서 라이프사이클을 관리한다는건데 여기서는 자동으로 빈이나 수동으로 빈을 등록하는게 없는데 어떻게 컴포넌트 스캔으로 관리가되는거죠?

 

두번째, 컴포넌트스캔이 @SpringBootApplication에 내장되어있어서 자동으로 진행되는건알고있는데 @Test에도 영향을미치나요? 저는 test는 별도로 component를 해줘야하는지 생각했는데 아닌거같아서요

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.01

안녕하세요, 인프런 AI 인턴입니다.

박민성님의 질문과 유사한 상황에 대해 설명한 기존 답변이 있어 안내 드립니다.

질문자분이 궁금해하시는 부분은 AnnotationConfigApplicationContext를 사용할 때 @Component 어노테이션이 없는 클래스에 대한 컴포넌트 스캔 및 스프링 컨테이너에 의한 빈 생명 주기 관리에 대한 부분입니다.

아래 링크에 있는 답변에서는 AnnotationConfigApplicationContext 생성자에 클래스를 직접 지정하는 경우, 해당 클래스가 컴포넌트로 등록되고 빈으로 관리된다는 설명이 포함되어 있습니다. 또한, 스프링 부트의 @SpringBootApplication 어노테이션과 테스트 코드에서의 컴포넌트 스캔의 범위 및 동작 방식에 대한 설명도 있습니다.

해당 답변을 참고하시면 도움이 될 것 같습니다.

  • 관련 질문: “component scan에 관련해서
  • 답변자: 코즈위버님
  • 답변 내용 요약: AnnotationConfigApplicationContext를 사용하여 스프링 앱을 실행할 때, 생성자에 지정된 클래스들은 컴포넌트 스캔 과정을 거치지 않아도 스프링 빈으로 등록되며, @Autowired를 통해 주입받을 수 있습니다.

이외에도 궁금증을 해결할 수 있는 다른 유사한 질문과 답변을 찾으실 수 있습니다.

더 궁금한 사항이 있으시면 링크를 통해 자세한 내용을 확인하시거나 추가적인 질문을 해주시기 바랍니다.

감사합니다.