Spring

[Spring] 스프링 빈과 의존관계 (스프링 빈에 등록하는 방법, 컴포넌트 스캔, 자바 코드)

권락현 2022. 1. 18. 00:07


스프링 빈에 등록하는 목적

스프링 컨테이너 안에 스프링 빈을 등록하여 컨트롤러가 리포지토리와 서비스를 사용할 수 있도록!

 

스프링 빈을 등록하는 방법

  1. 컴포넌트 스캔과 자동 의존관계 설정 (@Component -> @Service, @Repository...)
  2. 자바 코드로 직접 스프링 빈 등록

 

 


1. 컴포넌트 스캔 방식

  • @Component 애노테이션 : 스프링 빈으로 자동 등록해줌
  • @Controller, @Service, @Repository은 기본적으로 @Component를 포함하고 있음
  • 그래서 @Controller, @Service, @Repository만 써도 스프링 빈에 등록이 됨
  • 장점 : 쓰기에 편하다.

예시)

 

 

 

참고 : 스프링 빈에 등록하기 위해 @Component을 스캔하는 경로 범위는 실행 파일에 등록된 패키지 내에서만 스캔한다

 

추가 내용

  • 생성자에 @Autowired를 사용하면 스프링 빈을 찾아서 주입.
  • 생성자가 1개만 있으면 @Autowired는 생략 가능

 

  • 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록
  • 따라서 같은 스프링 빈이면 모두 같은 인스턴스(모두가 같이 인스턴스를 공유한다)

 

 


2. 자바 코드로 직접 등록

  • 컴포넌트를 쓰지 않고 별도의 자바 클래스를 생성해주어 스프링 빈에 등록하는 방식
  • @Configuration 애노테이션을 사용한다.
  • 장점 : 구현 클래스를 변경해야 한다면 구현체를 바꿔치기하기 좋다 (다른 곳에 손대지 않고 설정 파일만 바꾸면 됨)

예시)

 

추가 내용

  • 필드 주입, setter 주입, 생성자 주입 3가지 방법이 있지만 의존관계가 동적으로 변하는 경우는 없으므로 그냥 생성자 주입 방식을 쓰자!
  • @Autowired는 당연하게도 스프링 빈에 등록되지 않았다면 동작하지 않는다.

 

 


이곳에 작성한 내용은 인프런에서 서비스하는 강의 중 김영한님의 스프링 강의를 정리하고 저의 언어로 기억하고 싶은 것을 정리한 내용입니다. 아래에 출처를 남겨두겠습니다.

 

https://www.inflearn.com/roadmaps/373

 

[초급~중급] 우아한형제들 기술이사 김영한의 스프링 완전 정복 - 인프런 | 로드맵

대세를 따르세요! 자바 스프링 베스트셀러 우형 최연소 기술이사에게 배우는 스프링 완전 정복 🚩 [사진] 오픈 3개월 만에 수강생 7000+명의 극찬 릴레이 ✨원리와 실무를 한방에, 김영한의 스프

www.inflearn.com