[스프링 입문] 스프링 빈과 의존관계(1)

2024. 8. 24. 15:29·Back-End/Spring

[작성일: 2023. 05. 15]

 

 

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

스프링 빈 등록하고 의존관계 설정하기

  • 회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비한다.
  • Controller : MemberService를 통해서 회원가입 하고 MemberService를 통해 데이터를 조회할 수 있어야 하는데 이런 관계를 의존관계라고 한다.

 

MemberController

  • 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
  • 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI(Dependency Injection), 의존성 주입이라고 한다.
  • 이전 테스트에서는 개발자가 직접 주입했지만 이번에는 @Autowired에 의해 스프링이 주입해준다.
  • @Controller를 작성해주면 MemberController 객체를 생성해서 스프링이 컨테이너에서 관리해준다.
package hello.hellospring.controller;

import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

 

 

오류 발생

Consider defining a bean of type 'hello.hellospring.service.MemberService' in your configuration.
  • 해당 오류가 발생하는 이유는 memberSerivce가 스프링 빈으로 등록되어 있지 않기 때문이다.
  • 참고: helloController는 스프링이 제공하는 컨트롤러이기 때문에 스프링 빈으로 자동 등록되었다.
  • @Controller가 있으면 자동으로 등록된다.

출처 : 김영한님

 

 

 

 

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

  1. 컴포넌트 스캔과 자동 의존관계 설정(직접 애노테이션 작성하는 방법)
  2. 자바 코드로 직접 스프링 빈 등록하기

 

 

 

컴포넌트 스캔 원리

  • @Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
  • @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
  • @Component를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
    • @Controller
    • @Service
    • @Repository
  • 참고 : 생성자에 @Autowired를 사용하면 객체 생성 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아 주입한다.
  • 생성자가 1개만 있으면 @Autowired는 생략할 수 있다.

 

 

MemberService

  • MemberService에서 @Service을 작성한다.
@Service
public class MemberService {
    private final MemberRepository memberRepository;
   ...
}

 

 

MemberRepository

  • MemberRepository에서 @Repository를 작성한다.
@Repository
public class MemoryMemberRepository implements MemberRepository {
...
}

 

 

 

스프링 빈 등록

출처: 김영한님

 

  • memberService와 memberRepository가 스프링 컨테이너에 스프링 빈으로 등록되었다.
  • 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다.
    • 싱글톤: 유일하게 하나만 등록해서 공유하는 디자인패턴
  • 같은 스프링 빈이면 모두 같은 인스턴스이다. 설정으로 싱글톤이 아니게 설정할 수 있지만 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.

 

 

 

 

 

 

 

 

 

 


🐣 출처: 인프런 김영한님 강의

 

이 글은 인프런의 김영한님 스프링 강의를 보고 작성한 글입니다.

강의를 들으면서 정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지
'Back-End/Spring' 카테고리의 다른 글
  • [스프링 입문] 회원 관리 - 웹 MVC 개발
  • [스프링 입문] 스프링 빈과 의존관계(2)
  • [스프링 입문] 회원 관리(2)
  • [스프링 입문] 회원 관리(1)
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    spring
    스프링
    프로그래머스
    html
    의존성주입
    jsp
    DB
    자바스크립트
    Java
    최주호
    Swift
    변수
    생성자
    김영한
    JPA
    Security
    알고리즘
    sql
    다형성
    게시판만들기
    javascript
    MVC
    백준
    Database
    성능최적화
    HTTP
    자바
    데이터베이스
    객체
    Spring Security
  • hELLO· Designed By정상우.v4.10.0
뚜비
[스프링 입문] 스프링 빈과 의존관계(1)
상단으로

티스토리툴바