인프런 커뮤니티 질문&답변

seungLee님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

컴포넌트 스캔과 의존관계 자동 주입 시작하기

@ComponentScan 시 Singleton방식

작성

·

398

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과 바이트코드 조작의 마법 부분을 다시 복습해보시길 바랍니다.

감사합니다.

seungLee님의 프로필 이미지

작성한 질문수

질문하기