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

염재선님의 프로필 이미지
염재선

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

자바 코드로 직접 스프링 빈 등록하기

Controller 자바코드로 (@Configuration)으로 스프링빈등록.

작성

·

731

0

안녕하세요! 강의를 너무잘보고있습니다 

다름이아니라 강의 3:44 쯤 선생님이  "컨트롤러는 어쨌든 스프링이 관리하는거기때문에" 라고 하시는 의미가 잘 이해가 되질않습니다.

@Configuration 어노테이션으로 스프링빈으로 등록하는것도 결국 이 어노테이션을보고 스프링이 '어? 이녀석은 스프링이 관리해야겠따'라고 하는 것도 스프링이 관리하는것이 아닌가요..? 

그래서 고민하다 제가 선생님이 하신말의 의미를 (나름!) 생각해봤는데

컴포넌트 스캔방식으로 컨트롤러를 스프링빈등록하고 서비스나 리파지토리는 설정을 통해 스프링 빈으로 등록해서 컨트롤러에서 @Autowired를 이용해서 설정을 통해서 스프링 빈으로 등록되어있는 서비스를 DI할수있따!! 는걸 보여주기 위해서라고 생각을했습니당..

그런데 확신이들지도않아서 질문드립니다.

추가로

컨트롤러, 서비스, 리파지토리 모두 설정을 통해서 스프링빈 등록했더니 문제없이 동작하길래 더 의문이듭니다!!. 

답변 3

3

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

안녕하세요 염재선님

@Controller를 사용하면 컴포넌트 스캔의 대상이 됩니다. 따라서 스프링 빈으로 자동 등록됩니다.

@Controller는 @Controller 자체에 이미 컴포넌트 스캔의 의미가 내장되어 있습니다. 따라서 @Bean으로 별도로 등록해서 사용 것도 가능은 하지만 거의 @Bean으로 등록해서 사용하지는 않습니다.

서비스나 리포지토리는 사실 스프링이 없어도 잘 동작할 수 있지만, 컨트롤러는 사실 스프링이 제공하는 기능입니다.

고객의 URL 요청에 맞추어 특정 컨트롤러가 호출되는 행위들을 모두 컨트롤러가 제공하는 기능이지요.

따라서 스프링 없이 컨트롤러만 단독으로 사용하는 일은 사실상 없습니다.

이런 문맥으로 설명을 드린 것이고, 결국 컨트롤러도 객체이기 때문에 @Controller 또는 @Bean을 통해 스프링 빈으로 등록해야 합니다^^

감사합니다.

1

염재선님의 프로필 이미지
염재선
질문자

답변 감사합니다. ! 이해에 도움이 되었습니다.

0

염재선님의 프로필 이미지
염재선
질문자

설정을통해 컨트롤러, 서비스, 리파지토리 스프링빈등록코드입니다!

염재선님의 프로필 이미지
염재선

작성한 질문수

질문하기