본문 바로가기
Spring 입문

스프링MVC 입문13

by danny-j 2022. 11. 11.

MemberController

package com.danny.learningspring.controller;

import com.danny.learningspring.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;

@Controller
@RequiredArgsConstructor
public class MemberController {

    private final MemberService memberService;

//    @Autowired
//    public MemberController(MemberService memberService) {
//        this.memberService = memberService;
//    }
    
}
  • @Controller -- 빌드 될 때 Controller어노테이션을 인식하고 스프링컨테이너에 올려주고 스프링이 관리해줌
  • @Autowired -- 빌드 될 때 MemberController와 MemberService의 연결을 도와준다.
    • 알아서 의존 객체(Bean) 를 찾아서 주입한다.
    • 의존 객체(Bean) 가 2개 이상이면 오류를 발생시킨다.
  •  강의와 다르게 @RequiredArgsConstructor를 사용했다. 이유는 다음과 같음
    • 스프링에서 Been을 주입받는 방식은 @Autowired, setter, 생성자
    • 가장 권장하는 방식은 생성자로 주입을 받는 방식
    • @RequiredArgsConstructor는 final이 선언된 초기화되지 않은 모든 필드의 생성자를 생성해줌
    • 생성자를 사용한다면 해당 클래스의 의존성 관계가 변경될 때마다 생성자 코드를 계속해서 수정해야하는 번거로움이 있음

 

Service, Repository

@Service
@RequiredArgsConstructor
public class MemberService

@Repository
public class MemoryMemberRepository implements MemberRepository
  • Service클래스와 Repository클래스도 어노테이션을 붙혀줌으로써 빌드가 될 때 컨테이너에 등록될 수 있게 함

 

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

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

 

컴포넌트 스캔 원리

  • @Controller, @Service, @Repository 인터페이스는 @Component를 포함하고 있음
  • 빌드가 될 때 @Component 어노테이션이 있으면 스프링 빈으로 자동 등록 됨
  • @Controller, @Service, @Repository 어노테이션들이 자동으로 스프링 빈에 등록된 이유도 컴포넌트 스캔 때문
  • @SpringBootApplication가 등록된 클래스의 패키지의 하위 패키지에서만 component scan이 이루어짐

 

참고

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

'Spring 입문' 카테고리의 다른 글

스프링MVC 입문15  (0) 2022.11.11
스프링MVC 입문14  (0) 2022.11.11
스프링MVC 입문12  (0) 2022.11.11
스프링MVC 입문11  (0) 2022.11.10
스프링MVC 입문10  (0) 2022.11.10

댓글