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

풍이님의 프로필 이미지
풍이

작성한 질문수

스프링 핵심 원리 - 기본편

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

메서드 뿐만 아니라 클래스 자체를 스프링 빈으로 등록 가능한가요?

작성

·

166

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

안녕하세요, 섹션 5의 "컴포넌트 스캔과 의존관계 자동 주입 시작하기" 강의 듣다가 궁금증이 생겨서 글 남깁니다.


이전 강의들에서 @Configuration 이 붙은 클래스를 구성 정보로 등록하고,

해당 클래스 내부의 @Bean 이라는 애너테이션이 붙은 메서드들을 스프링 빈에 등록한다고 이해했습니다.

 

근데, 구성 정보로서 등록할 클래스 앞에 @ComponentScan 애너테이션을 붙이고,

스프링 빈으로 등록할 클래스 앞에 @Component 애너테이션을 붙이는 부분이 잘 이해가 되지 않습니다.

 

스프링 컨테이너에 빈으로 등록할 수 있는 건 메서드(@Bean 처럼) 뿐만 아니라,

클래스 자체(@Component) 를 통째로 빈으로 등록할 수 있는건가요?

 

만약 클래스 자체를 통째로 빈으로 등록할 수 있다는 말씀이시라면,

@Component 애너테이션이 붙은 클래스 내부에 있는 모든 메서드들과 변수들을 자동으로 빈으로 등록한다는 것이고,

이것들을 .getBean() 메서드를 통해 조회할 수 있다는 것인가요?

답변 1

0

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

풍이님의 질문은 @Component 애너테이션을 통해 클래스를 스프링 빈으로 등록하는 방법과 해당 과정에서 스프링 컨테이너가 처리하는 방식에 대한 이해를 요구하는 것으로 보입니다. 관련하여 궁금증을 해결할 수 있는 기존의 답변을 공유드립니다.

클래스를 스프링 빈으로 등록하는 가장 기본적인 방법 중 하나는 바로 @Component 애너테이션을 사용하는 것입니다. @Component 애너테이션을 클래스에 붙이면, 스프링 컨테이너는 해당 클래스를 자동으로 찾아서 스프링 빈으로 등록합니다. 이 과정에서 @ComponentScan 애너테이션이 중요한 역할을 하는데, 이는 @Component가 붙은 모든 클래스를 스캔해서 스프링 빈으로 등록하기 위해 사용됩니다.

@Component 애너테이션이 붙은 클래스 내부에 있는 메소드나 변수들이 자동으로 모두 빈으로 등록되는 것은 아닙니다. @Component는 클래스 레벨에서 사용되며, 해당 클래스의 인스턴스를 스프링 빈으로 등록하는 것을 의미합니다. 클래스 내부의 메소드나 변수를 별도의 빈으로 등록하기 위해서는, 특정 조건을 만족해야 하는데(@Bean 애너테이션을 사용하는 등), 일반적으로 @Component 애너테이션만으로는 해당 메소드나 변수를 개별 빈으로 등록하지 않습니다.

이와 관련된 세부적인 내용을 확인할 수 있는 질문 링크를 제공합니다:
- 질문 제목: 스프링 컨테이너가 등록하는 것

위 링크에서는 @Component와 @Bean을 통한 스프링 빈 등록 방법의 차이와 각각의 역할에 대한 설명이 포함되어 있으며, 스프링 컨테이너가 어떻게 작동하는지에 대한 이해를 돕고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

풍이님의 프로필 이미지
풍이
질문자

안그래도 혼자서 생각해봤습니다.

 

@Bean 이 붙은 메서드 자체를 스프링 빈에 등록하는 것이 아니라, 해당 메서드가 반환하는 객체 인스턴스(즉, 클래스) 를 빈에 등록하는 것이죠?

 

반면, 특정 클래스 앞에 @Component 를 붙이면, 말그대로 해당 클래스(의 인스턴스?) 를 곧바로 스프링 빈에 등록하는 것이구요.

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 풍이님

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

감사합니다.

풍이님의 프로필 이미지
풍이

작성한 질문수

질문하기