작성
·
399
6
안녕하세요! 강사님
다름이아니라 라이브코딩 도중 의문점이 생겨서 질문 남겨봅니다!
번거로우실텐데 죄송합니다
질문1.
강의에서 본것처럼 AppConfig.class 에서 @Configuration 이 붙지않으면 스프링 컨테이너가 스프링빈들을 전부 싱글톤 방식이 아닌 계속 인스턴스생성을하여 메모리 낭비가 되는 모습까지는 이해했습니다.
근데, AutoAppConfig.class에서 @ComponentScan 시에 @Configuration 애노테이션을 안붙여도 모든 Component들이 스캔 후 알아서 싱글톤방식으로 빈이 생성되는것을 test코드를 통해 확인했습니다!
AutoAppConfig에서 컴포넌트 스캔 자체가 AppConfig같은 설정정보 없이도 @Component만을 탐색해서 빈을 등록하는거까지는 이해하고는 있는데 왜 @Configuration 애노테이션을 안붙여도 자동적으로 싱글톤방식으로 빈이 생성되는지 궁금합니다!
제가 뭘 놓치고 있는걸까요???
답변 1
11
안녕하세요. seungLee님
@Configuration 애노테이션과 싱글톤 방식은 무관합니다. 그리고 컴포넌트 스캔과 @Configuration 애노테이션도 서로 관계가 없습니다. (@Configuration이 컴포넌트 스캔의 대상이 되는 것만 의미가 있습니다.)
스프링은 컴포넌트 스캔시 기본으로 싱글톤으로 빈을 등록합니다. 그리고 @Configuration 없이 @Bean만 사용해서 스프링 빈을 등록해도 싱글톤으로 등록됩니다.
싱글톤이 안되고, 문제가 되는 부분은 @Bean으로 수동 등록할 때, 내부의 의존관계를 직접 메서드 호출로 주입할 때만 발생하고, 이때 문제를 해결해주는 것이 @Configuration 애노테이션입니다. 이 부분은 @Configuration과 싱글톤, 그리고 @Confiruation과 바이트코드 조작의 마법 부분을 다시 복습해보시길 바랍니다.
감사합니다.