본문 바로가기
Backend/Spring

[Spring] 스프링 빈과 의존관계

by eyi-jin 2022. 7. 1.
이 게시글은 [인프런]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 기반으로 작성되었으며 강의를 기억하기 위한 기록물입니다. 순수하게 복습하기 위한 용도로 작성되었음을 미리 밝힙니다.

컴포넌트 스캔과 자동 의존관계 설정

회원 컨트롤러가 회원 서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자

정형화된 패턴

  • Controller: 외부 요청을 받음
  • Repository: 데이터 저장
  • Service: 비즈니스 로직 만들기

스프링 빈을 등록하는 2가지 방법

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기

⇒ 2가지 방법 모두 알아야 한다!

컴포넌트 스캔의 원리

  • @Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
  • @Controller, @Service, @Repository 애노테이션들도 @Component를 포함하고 있기 때문에 스프링 빈으로 자동 등록된다.
  • @SpringBootApplication이 들어있는 패키지와 그 하위에 포함된 파일들에서 컴포넌트 스캔이 이루어진다.

  • 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.(생성자가 1개있으면 생략가능) ⇒ 연관관계를 만들어줌
  • 이렇게 의존관계를 개발자가 직접 주입하는게 아니라, 외부(Spring)에서 주입하는것을 DI(Dependency Injection, 의존성주입)이라고 한다.

참고: 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.

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

  • DI(의존성 주입)는 필드 주입, setter 주입, 생성자 주입 3가지 방법이 있는데,
    의존 관계가 실행 중 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.
  • 주로 정형화된 컴포넌트 스캔을 사용하지만, 정형화 되지않거나 상황에 따라 구현 클래스를 변경해야 할 경우는 설정을 통해 스프링 빈으로 등록한다.
  • 해당 프로젝트는 향후 리포지토리를 다른 리포지토리로 변경한 예정이므로 스프링 빈 방식으로 설정을 한다.

'Backend > Spring' 카테고리의 다른 글

JPA vs MyBatis  (0) 2023.07.09
[Spring] 회원 관리 예제 - 웹MVC 개발  (0) 2022.07.02
[Spring] 회원 관리 예제 - 백엔드 개발  (0) 2022.06.26
[Spring] 스프링 웹 개발 기초  (0) 2022.06.25
[Spring] 프로젝트 환경설정  (0) 2022.06.24

댓글