📙

[스프링 입문] 4. 스프링 빈과 의존관계

작성일자
Oct 12, 2022
태그
SUB PAGE
프로젝트
스프링 입문
책 종류
본 게시글은 하단 강의를 듣고 학습한 내용을 제 생각으로 요약, 정리한 글입니다.
목차
 

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

1) 스프링 빈 등록과 의존관계 설정

  • 지금까지 한 것
    • 멤버 서비스, 멤버 리포지토리, 멤버 객체 만듦
    • 서비스 통해서 멤버 가입해 리포지토리에 저장될 수 있고, 리포지토리에서 꺼내올 수 있음
  • 이번 시간에 할 일
    • 화면 붙이기: 컨트롤러와 뷰 템플릿 필요
    • 회원 가입하고, 회원 가입한 결과를 html로 뿌려주는 것들 하려 함
    • 멤버 컨트롤러 만들기
      • 멤버 서비스 통해서 회원 가입하고, 멤버 서비스를 통해서 데이터를 조회할 수 있어야 함.
      • 이를 서로 의존 관계가 있다고 표현함.
      • 멤버 컨트롤러가 멤버 서비스에 의존한다.
      •  

2) 멤버 컨트롤러 만들기

  1. MemberController.java 생성 → @Controller의 역할: 스프링 빈 등록
    1. src/main/java/hello.hellospring.controller/MemberController.java
      • controller패키지에 new class 생성
      • @Controller 입력
      위와 같은 Controller 만들면 생기는 일
      1. 스프링 컨테이너가 스프링 창에 뜰 때 스프링 컨테이너라는 스프링 통이 생김.
      1. 코드에서 @Controller가 있으면 스프링이 MemberController 객체를 생성해서 스프링 통에 넣어두고 관리함.
      • 이전에 HelloController의 기능들이 동작했던 이유
        • @Controller 보고서 스프링이 뜰 때 HelloController 객체를 생성해서 스프링이 들고 있음
        • 이를 스프링 컨테이너에서 스프링 빈이 관리된다고 표현함
        • 그림으로 살펴보기
          notion image
          • 스프링 부트 안에 스프링 컨테이너와 내장 톰캣 서버가 있음
          • 스프링 컨테이너에 helloController (빈) 가 있음.
  1. MemberController가 MemberService 가져다 쓸 수 있게 MemberService객체 생성(스프링 컨테이너에 등록)
    1. src/main/java/hello.hellospring.controller/MemberController.java
      MemberController에서 행하는 private final MemberService memberService = new MemberService();의 문제점
      • 스프링이 관리하게 되면 다 스프링 컨테이너에 등록하고서 스프링 컨테이너에서 받아서 쓰도록 바꿔야 함.
      • 그 이유는 MemberController말고 다른 여러 컨트롤러들이 MemberService를 가져다 쓸 텐데, 객체를 new로 생성하고 보면, 별 기능이 없기에 여러 개 생성할 필요가 없기 떄문임.
      • 하나만 생성해두고 공용으로 쓰면 됨
      • 이렇게(new로 객체 생성하는 방법) 해도 되지만 다른 방법(스프링 컨테이너에 등록하고 쓰는 방법)이 더 나음